#json #powershell
#json #powershell
Вопрос:
Я нашел симпатичный маленький JSON API от Kayaposoft, который выдаст значение true / false, если данный день является рабочим днем или нет (например, воскресенье, 14 апреля; isWorkDay: false
). Этот API также может отмечать наши местные праздники, такие как Ваппу в Финляндии и т. Д.
Итак, когда я пытаюсь написать сценарий этого в PowerShell (будучи новичком, которым я являюсь), я быстро понял проблему с приведенным ниже кодом. Хотя код работает, он не очень практичен и зависит от каждой переменной дважды (один раз для ее настройки и один раз в цикле).
Есть ли какой-нибудь способ украсить этот код? Можно ли сделать это более практичным и / или не использовать каждую переменную дважды?
$date = (Get-Date).AddDays(11)
$jsonDate = $date.ToString('dd-MM-yyyy')
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$jsonRequest = Invoke-WebRequest "https://kayaposoft.com/enrico/json/v2.0/?action=isWorkDayamp;date=$jsonDateamp;country=fin" | ConvertFrom-Json
while ($jsonRequest.isWorkDay -ne $true) {
$date = $date.AddDays(1)
$jsonDate = $date.ToString('dd-MM-yyyy')
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$jsonRequest = Invoke-WebRequest "https://kayaposoft.com/enrico/json/v2.0/?action=isWorkDayamp;date=$jsonDateamp;country=fin" | ConvertFrom-Json
Write-Host $jsonDate
Write-Host $jsonRequest
}
Results:
22-04-2019
@{isWorkDay=False}
23-04-2019
@{isWorkDay=True}
Комментарии:
1. Оберните его в функцию Get-WorkingDay и верните только конечную дату.
Ответ №1:
Что-то вроде этого:
$date = (Get-Date)
# not sure if you really need this ?!?
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# do { ... } while (...) - execute at least once
do {
$jsonDate = $date.ToString('dd-MM-yyyy')
$jsonRequest = Invoke-WebRequest "https://kayaposoft.com/enrico/json/v2.0/?action=isWorkDayamp;date=$jsonDateamp;country=fin" | ConvertFrom-Json
$date = $date.AddDays(1)
Write-Host $jsonRequest
Write-Host $jsonDate
}
while ($jsonRequest.isWorkDay -ne $true)
Комментарии:
1. Я никогда не знал, что в PowerShell существуют циклы do-while. У меня сложилось впечатление, что вам нужны только циклы while, но, наверное, я, должно быть, неправильно прочитал! Спасибо! И да,
$date = (Get-Date).AddDays(11)
это было только для того, чтобы протестировать его, чтобы я мог приземлиться в нерабочий день.2. @tobulos1 Powershell построен поверх .NET — он действительно близок к C # и имеет те же конструкции