インストールされたHotFixのプログラムを検索する

Windowsのパッチの検索で、win32_QuickFixEngineeringというWMIのクラスをみつけました。このクラスはインストール済みHotFixの情報をもっています。以下サイトにもあるように実際にインストールされている修正プログラムを見逃す場合があるそうです。

Hey, Scripting Guy!
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept05/hey0930.mspx


実際に、インストールされたHotFixのプログラムを検索するプログラムを作成してみました。今回は引数をインストール日付、パッチ番号どちらを指定してもよいようにしました。

set-PSDebug -strict
# ---------------------------------
# インストールされたHotFixのプログラムを検索する
# 第一引数:yyyy/mm/dd または パッチ番号
# ---------------------------------
Function GetInstalledHotFix{
    # 引数の取得
    param([string]$str)
    
    # win32_QuickFixEngineeringオブジェクト取得
    $qfe = get-wmiobject -query "select * from win32_QuickFixEngineering"
    
    # 引数が日付の場合
    $r = $str -match "^\d{4}/\d{2}/\d{2}$"
    if ($r){
        # 日付が一致したらバッチ番号を表示
        foreach ($q in $qfe){
            $d = ($q.InstalledOn).tostring("yyyy/MM/dd")
            if ($d -eq $str){ write-Host $q.HotFixID }
        }
    
    # 引数が日付以外の場合(パッチ番号)
    }else{
        # パッチ番号が存在したらOKを表示
        foreach ($q in $qfe){
            $id = $q.HotFixID
            if ($id -eq $str){ write-Host "OK" }
        }
    }
}