by kusakari
18. 9月 2009 23:36
PowerShellからWSUSに接続して、WSUSクライアントの未適用更新プログラム情報を取り出します。
環境:PowerShell v2 , WSUS 3.0
■Microsoft.UpdateServices.Administrationを追加して、ローカルのWSUSサーバへ接続します。
[Reflection.Assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()
■ComputerTargetScopeクラスを作成します。
$compScope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$compScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::All
■UpdateScopeクラスを作成します。
状態として下記の2つの状態である更新プログラムを取得します。
| NotInstalled |
: |
未インストール |
| Downloaded |
: |
ダウンロード済みで、未インストール |
$upScopeNI = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$upScopeNI.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$upScopeDL = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$upScopeDL.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::Downloaded
■サンプルスクリプト
[Reflection.Assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()
$compScope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$compScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::All
$upScopeNI = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$upScopeNI.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::NotInstalled
$upScopeDL = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$upScopeDL.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::Downloaded
$ret = ""
$comps = $wsus.GetComputerTargets($compScope) | ForEach-Object {
$updateInfoNI = $_.GetUpdateInstallationInfoPerUpdate($upScopeNI);
$updateInfoDL = $_.GetUpdateInstallationInfoPerUpdate($upScopeDL);
$ret += "=============================================`r`n"
$ret += "コンピューター名: " + $_.FullDomainName + "`r`n"
$ret += "IPアドレス: " + $_.IPAddress + "`r`n"
$ret += "最終状態送信日時: " + ([datetime]$_.LastReportedStatusTime).ToString("yyyy/MM/dd HH:mm:ss") + "`r`n"
$ret += "OS: " + $_.OSDescription + "`r`n"
$ret += "=============================================`r`n"
$updateInfoNI | ForEach-Object {
$updateNI = $wsus.GetUpdate($_.UpdateId)
$ret += "Title: " + $updateNI.Title + "(" + $updateNI.UpdateClassificationTitle + ")(NotInstalled)`r`n"
}
$updateInfoDL | ForEach-Object {
$updateDL = $wsus.GetUpdate($_.UpdateId)
$ret += "Title: " + $updateDL.Title + "(" + $updateDL.UpdateClassificationTitle + ")(Downloaded)`r`n"
}
$ret += "`r`n"
}
Write-Host $ret
■結果

18204d36-d02c-4fad-bf67-37bc9f3a1427|0|.0
Category: PowerShell
Tags: WSUS