我正在尝试收集有关网络上每台计算机的一些详细信息。我想提取 Windows 更新信息并查看它们是否在最多 30 天内发布,这就是我设法拼凑的信息。我知道它们单独工作,但当我把它们放在一起时就不行了。
希望有人能告诉我我做错了什么;
$WUpdateResult = (Get-Hotfix | Sort-Object -Property InstalledOn -Descending | Select-Object -First 1).InstalledOn
$WUR30Days = $WUpdateResult -lt 30
$info.WUpdateResult = if ($WUR30Days = "False") { $WUpdateResult } else { "N/A" }
这里有几个潜在的问题:
InstalledOn
属性为您提供安装更新的日期,但您不会将其与今天的日期进行比较。也许这就是你想要的:
$($(Get-Date) - $WUpdateResult).Days -lt 30
此外
$WUR30Days = "False"
只需将值“False”分配给变量 WUR30Days
- 试试这个:
$WUR30Days -eq $false
=
) 代替 (-eq
) 的示例此片段显示了单个等号在
if
表达式中使用时如何令人困惑:
$ThisIsDefinitelyFalse = $(get-date).Day -gt 100
Write-Host $ThisIsDefinitelyFalse
Write-Host $ThisIsDefinitelyFalse.GetType()
if ($ThisIsDefinitelyFalse = "False") {
Write-Host "WTF?!"
}
if ($ThisIsDefinitelyFalse = "True") {
Write-Host "WTF?!?!"
}
Write-Host $ThisIsDefinitelyFalse
Write-Host $ThisIsDefinitelyFalse.GetType()
输出为:
False
System.Boolean
WTF?!
WTF?!?!
True
System.String
因为
if
语句内的表达式返回它们已成功分配变量的事实。您还可以看到该变量以前是布尔值,现在已更改为字符串。 if
中的这个表达式更新了变量的值:
$ThisIsDefinitelyFalse = "True"