Powershell保持循环,直到条件为真,然后继续

Powershell保持循环,直到条件为真,然后继续,powershell,Powershell,我已经编写了一个脚本,到目前为止,它能够检查文件“latest.json”中的“created_at”对象,该对象显示软件发生提交的最后日期 $websiteJson = Invoke-WebRequest "https://website/latest.json" | ConvertFrom-Json | select created_at $todaysDate = Get-Date -Format "yyyy-MM-dd HH:mm" if($websitejson.create

我已经编写了一个脚本,到目前为止,它能够检查文件“latest.json”中的“created_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"
}
latest.json的一部分是什么样子的

"created_at":"2020-03-23 17:32:48"
如何更改此选项以保持循环,直到从latest.json匹配的日期,然后继续下一步(下载并安装软件)另外,由于“创建时间”具有“17:32:48”,这会不会导致日期检查失败,因为时间不匹配?

。我希望它不断检查日期是否匹配


谢谢大家!

现在,我不想费心将日期转换为匹配的日期,以确保它们的格式相同,但您需要的是一个
do-until
循环。如果您提供返回的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日期和$todaysDate设置为相同的格式,然后您可以这样做,它就会工作

如果要比较日期和/或时间,请使用datetime对象而不是datetime字符串。像这样的

如果要测试两个时间对象之间的实际时间差

((Get-Date -Date '2020-03-23 18:11:22') - [datetime]'2020-03-23 17:32:48').TotalHours
# result = 0.642777777777778
你总是提到日期,好像你不想要时间,所以这个方法可以用来比较两个时间戳的日期部分

# 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

结果=
True

信息更新的频率是多少?窗口为4小时,并且可以在这4小时内的任何时间点出现。因此,您需要检查间隔是多久?0400、0800、1200等对于主要间隔时间似乎很好。。。那么第二个间隔可能需要5分钟?问题是比较日期字符串而不是日期对象。我将把你的JSON信息转换成一个
[datetime]
对象,然后在上面使用
.Date
来获得日期部分。我添加了一个答案,显示使用datetime对象&从一个日期字符串转换成一个日期对象。我正在考虑执行以下操作:创建子字符串(0,10)来从JSON返回日期而不是分钟。然后更改获取日期格式“yyyy-MM-dd”