如何让powershell检查我的计算机';的Windows更新已过期超过30天

如何让powershell检查我的计算机';的Windows更新已过期超过30天,powershell,windows-update,Powershell,Windows Update,我正在测试我的电脑的windows更新是否超过30天,如果超过30天,我会弹出一条消息警告用户 有人能帮我测试一下日期吗,因为无论发生什么情况,你的WINDOWS更新都是最新的,这似乎给了我相同的结果 我想我需要更改日期的格式,以便能够根据Get date结果对其进行测试 Get-WmiObject -Class win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" -Err

我正在测试我的电脑的windows更新是否超过30天,如果超过30天,我会弹出一条消息警告用户

有人能帮我测试一下日期吗,因为无论发生什么情况,你的WINDOWS更新都是最新的,这似乎给了我相同的结果

我想我需要更改日期的格式,以便能够根据
Get date
结果对其进行测试

Get-WmiObject -Class win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" -ErrorAction SilentlyContinue | 
    select -first 1 @{LABEL = "date"; EXPRESSION = {$_.ConvertToDateTime($_.timegenerated)}}, @{LABEL = 'Update'; EXPRESSION = {$_.message}} |
    FT -AutoSize -Wrap

$DateTimeNow = Get-Date
$Daysback = "-31" 
$Updatedate = $_.ConvertToDateTime

if ($DateTimeNow.AddDays($Daysback) -lt $Updatedate.InstalledOn.Date) {
    $wshell = New-Object -ComObject Wscript.Shell

    $wshell.Popup("***WARNING***YOUR WINDOWS UPDATES ARE OVER A MONTH OUT OF 
    DATE. PLEASE CONTACT  IT", 0, " Windows Update Check", 0x1)
}
else {
    $wshell = New-Object -ComObject Wscript.Shell

    $wshell.Popup("YOUR WINDOWS UPDATES ARE IN DATE", 0, " Windows 
    Update Check", 0x1)
}
这应该起作用:

$LastUpdate = Get-WmiObject -Class win32_reliabilityRecords -filter "sourcename = 
    'Microsoft-Windows-WindowsUpdateClient'" -ErrorAction SilentlyContinue |
    Select -first 1 @{LABEL = "date";EXPRESSION = {$_.ConvertToDateTime($_.timegenerated)}},@{LABEL = 'Update';EXPRESSION = {$_.message}}

$DateTimeNow = Get-Date
$Daysback = -31

if($LastUpdate.Date -lt $DateTimeNow.AddDays($Daysback)){
    $wshell = New-Object -ComObject Wscript.Shell
    $wshell.Popup("***WARNING***YOUR WINDOWS UPDATES ARE OVER A MONTH OUT OF DATE. PLEASE CONTACT  IT",0," Windows Update Check",0x1)
} else {
    $wshell = New-Object -ComObject Wscript.Shell
    $wshell.Popup("YOUR WINDOWS UPDATES ARE IN DATE",0," Windows Update Check",0x1)
}
更改:

  • 您没有返回变量的
    Get WmiObject
    调用的结果,而是测试始终为空的
    $Updatedate
  • 你的约会逻辑需要颠倒

为什么不这样做<代码>gwmi win32_quickfixengineering |?{($\.Installedon-gt((获取日期).adddays(-30))-和($\.Installedon-lt(获取日期))}