Powershell продолжает цикл до тех пор, пока условие не станет верным, затем продолжайте - PullRequest
0 голосов
/ 02 апреля 2020

Я написал скрипт, который на данный момент может проверять файл "latest. json" для объекта "create_at", который показывает последнюю дату, когда произошла фиксация для программного обеспечения.

 $websiteJson = Invoke-WebRequest "https://website/latest.json" | ConvertFrom-Json  | select created_at

$todaysDate = Get-Date -Format "yyyy-MM-dd HH:mm" 

if($websitejson.created_at | where {$_.created_at -eq $todaysDate}){
Write-Output "Today's date matches"

} else {
    Write-Output "has not yet been updated"
}

Как выглядит часть последней. json выглядит как

"created_at":"2020-03-23 17:32:48"

Как мне изменить это, чтобы продолжать цикл до тех пор, пока не будет извлечена дата из последних. json совпадений, затем перейдите к следующий шаг (будет загрузка и установка программного обеспечения). Кроме того, так как «создан в» имеет «17:32:48», это приведет к сбою проверки даты, поскольку время не совпадает?

. Я хочу, чтобы он продолжал проверять, совпадают ли даты.

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Прямо сейчас я не собираюсь беспокоить преобразование дат в соответствие, чтобы убедиться, что они имеют одинаковый формат, но для ваших конкретных c вопросов вам нужно просто do until l oop. Я мог бы обновить это, чтобы проверить форматы даты, если вы предоставите пример макета возвращенного JSON.

Do{
    $websiteJson = Invoke-WebRequest "https://website/latest.json" | ConvertFrom-Json  | select created_at
    $todaysDate = Get-Date -Format "yyyy-MM-dd HH:mm" 

    if($websitejson.created_at | where {$_.created_at -eq $todaysDate}){
        Write-Output "Today's date matches"

    } else {
        Write-Output "has not yet been updated"
    }

    start-sleep -s 60

}until($websiteJson -eq $todaysDate)

Я считаю, что это не сработает сразу. Вам нужно, чтобы JSON date и $ todaysDate были в одинаковом формате, тогда вы можете сделать это, и это сработает.

0 голосов
/ 04 апреля 2020

, если вы хотите сравнить дату и / или время, используйте объекты даты и времени вместо строки времени и даты . как-то так ...

если вы хотите проверить фактическую разницу во времени между двумя объектами времени ...

((Get-Date -Date '2020-03-23 18:11:22') - [datetime]'2020-03-23 17:32:48').TotalHours
# result = 0.642777777777778

вы продолжаете упоминать date как вам не нужно время, поэтому этот метод будет работать для сравнения частей даты двух временных отметок ...

# the date at the time the code was run = 2020 April 03, Friday 4:30:34 PM
$Today = (Get-Date).Date
$Created_At = '2020-04-03 15:15:15'

$Today -eq ([datetime]$Created_At).Date

result = True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...