获取 Server 2008 Powershell 上的修补程序

获取 Server 2008 Powershell 上的修补程序

在 Windows Server 2008-R2 上使用以下命令有效:

Get-Hotfix -cn HOSTNAME | sort InstalledOn -des  | select HotfixID, Description, InstalledOn -first 20

但它不适用于 Windows Server 2003(这并不奇怪)或 Server 2008 32 位(这对我来说很奇怪)。

当我在 32 位 Win 2008 服务器上运行此脚本时出现以下错误:

Sort-Object:异常设置“InstalledOn”:“使用“1”个参数调用“Parse”时发生异常:“字符串未被识别为有效的 DateTime。””

答案1

抛出错误是因为无法按日期/时间对它们进行排序,因为带有 InstalledOn 条目的修补程序无法解析为有效的日期/时间。

因此,您很可能在一台没有正确“安装日期”的机器上安装了 HotFixes,因此它只会返回这些条目的空白。

这并不特定于 Windows 的某个版本,因为我在 Windows 2012 R2 服务器上进行了测试,发现了同样的错误。

您可以通过运行不带排序的查询来确认 InstalledOn 日期:

Get-Hotfix -cn HOSTNAME | select HotfixID, Description, InstalledOn -first 20

例子:

PS C:\Windows\system32> Get-Hotfix | select HotfixID, Description, InstalledOn -first 20

HotfixID                                Description                             InstalledOn
--------                                -----------                             -----------
KB2868626                               Security Update
KB2883200                               Update
KB2887595                               Update
KB2894852                               Security Update                         01Dec2015 12:00:00 AM
KB2896496                               Update
KB2900986                               Security Update
KB2903939                               Update
KB2904440                               Update
KB2911106                               Update
KB2919355                               Update                                  04Oct2014 12:00:00 AM

请注意,其中许多都没有显示任何内容InstalledOn

答案2

绝对不是最好的解决方案,但对我来说有效:

$lastHotFixInstallDate = Get-HotFix | Select-Object @{ 
    'L' = 'installDate';
    'E' = {
        "{0}-{1:00}-{2:00}" -f `
            [Int]$_.PSBase.Properties["installedon"].value.Split('/')[2], `
            [Int]$_.PSBase.Properties["installedon"].value.Split('/')[0], `
            [Int]$_.PSBase.Properties["installedon"].value.Split('/')[1]}  
}  | Sort-Object -Property installDate | Select-Object -Last 1

此解决方案利用了 $_.PSBase.Properties["installedon"].value 属性。由于此属性是 m/d/yyyy 格式的字符串,因此需要在 / 上手动拆分,然后对其进行排序。

相关内容