2019/06/03追記
Where-Object
で$_
を使わない表記についてコメントを頂けたので反映しました。
これに伴い記事末尾に余談も追記しました。
今日調べる機会があったので。PowerShell
のGet-HotFix
コマンドレットで取得できます。
Get-HotFix | Where-Object HotFixID -match "KB4[01]" # KB40 か KB01 が含まれる更新の一覧を取得する
Get-HotFix | Where-Object HotFixID -match "KB4[01]" | Sort-Object -Property InstalledOn # 適用日でソート
なおGet-HotFix自体に-Id
パラメータがありますが、ワイルドカードが使えないためあまり利便性は無いです。
PS C:\Users\me> Get-Help Get-HotFix -Parameter Id
-Id <String[]>
指定された修正プログラム ID を持つ修正プログラムのみを取得します。既定値は、コンピューター上のすべての修正プログラムです。
必須 false
位置 1
既定値 All hotfixes
パイプライン入力を許可する false
ワイルドカード文字を許可する false # ← ココ
PS C:\Users\me>
なのでID検索したいときはWhere-Object
に渡して-match
か-like
で探す方が便利ですね。
また-ComputerName
パラメータが使えるため、(設定されていれば)リモートノードの情報を一括で取得することができます。
PS C:\Users\me> Get-HotFix -ComputerName REMOTE1,REMOTE2 | Where-Object HotFixID -match "KB289"
Source Description HotFixID InstalledBy InstalledOn
------ ----------- -------- ----------- -----------
REMOTE1 Security Update KB2894856 REMOTE1\Administrator 2015/01/26 0:00:00
REMOTE1 Update KB2896496 REMOTE1\Administrator 2015/01/26 0:00:00
REMOTE2 Security Update KB2894856 REMOTE2\Administrator 2015/01/26 0:00:00
REMOTE2 Update KB2896496 REMOTE2\Administrator 2015/01/26 0:00:00
PS C:\Users\me>
余談:Where-Object
の$_
について
The $_ automatic variable represents each object that is passed to the Where-Object cmdlet.
The first command uses the script block format, the second command uses the comparison statement format.
The commands are equivalent and can be used interchangeably.Get-Service | Where-Object {$_.Status -eq "Stopped"} Get-Service | where Status -eq "Stopped"
Where-Object
をスクリプトブロックを用いずに使用する場合$_
は不要とのことでした。
どこで刷り込まれた知識だったか、常に必要だと思っていました…。勉強になりました。
引用で示されている通り、$_
を使う場合と使わない場合でコマンドは等価であり、互換性があるとのことです。