it-swarm-ja.com

Server 2008Powershellで修正プログラムを入手する

Windows Server2008-R2で次のコマンドを使用すると機能します。

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

しかし、Windows Server 2003では動作しません(当然のことながら)OR Server 2008 32ビット(これは私にとって奇妙なことです)。

このスクリプトを32ビットのWin2008サーバーで実行すると、次のエラーが発生します。

Sort-Object:例外設定 "InstalledOn": "" 1 "引数を指定して" Parse "を呼び出す例外:"文字列が有効なDateTimeとして認識されませんでした。 ""

1
Brian Henson

有効な日付/時刻に解析できないInstalledOnエントリを含む修正プログラムが原因で、日付/時刻による並べ替えに失敗したため、エラーがスローされます。

したがって、適切な「インストール日」がない1台のマシンにHotFixがインストールされている可能性が高いため、これらのエントリには空白が返されます。

これはWindows2012 R2サーバーでテストしたところ、同じエラーが発生したため、Windowsのバージョンに固有のものではありません。

並べ替えなしでクエリを実行すると、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形式の文字列であるため、/で手動で分割し、後で並べ替える必要があります。

1
Uwe