PowerShellスクリプトでWindows 10の現在のパッチ情報を簡単に取得する方法
Windows 10システムに最新の累積更新プログラムがインストールされているかどうかを確認したい場合、多くのユーザーは「Windows 10の更新履歴」ページをチェックする方法を利用しています。しかし、この記事ではPowerShellスクリプトを使ってWindows 10の現在のパッチ情報を取得する方法を紹介します。コマンド一つで必要な情報を素早く把握できるため、複数台のPCを管理している方にも特に便利です。
Windows Updateの状態を確認できるPowerShellスクリプト
このPowerShellスクリプトを使うと、Windows 10コンピューターが現在使用しているOSビルドと、そのデバイスで利用可能な最新の更新プログラムをレポートできます。さらに、現在のワークステーションのWindows 10バージョン向けにMicrosoftが公開したすべてのWindows更新プログラムの一覧を出力することも可能です。
スクリプトを実行すると、以下の情報が表示されます。
- 現在のOSバージョン
- 現在のOSエディション
- 現在のOSビルド番号
- そのビルド番号に対応するインストール済みの更新プログラム(KB番号と情報ページへのリンク付き)
- 該当OSバージョンで利用可能な最新の更新プログラム
スクリプトの作成と実行手順
PowerShellスクリプトでWindows 10の現在のパッチ情報を取得するには、まずテキストエディターに以下のコード(GitHub公開版)を貼り付けて「Get-CurrentPatchInfo.ps1」といった名前で保存し、管理者権限のPowerShellから実行してください。
[CmdletBinding()]
Param(
[switch]$ListAllAvailable,
[switch]$ExcludePreview,
[switch]$ExcludeOutofBand
)
$ProgressPreference = 'SilentlyContinue'
$URI = "https://aka.ms/WindowsUpdateHistory" # Windows 10 release history
Function Get-MyWindowsVersion {
[CmdletBinding()]
Param
(
$ComputerName = $env:COMPUTERNAME
)
$Table = New-Object System.Data.DataTable
$Table.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
$ProductName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ProductName).ProductName
Try
{
$Version = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ReleaseID -ErrorAction Stop).ReleaseID
}
Catch
{
$Version = "N/A"
}
$CurrentBuild = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name CurrentBuild).CurrentBuild
$UBR = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name UBR).UBR
$OSVersion = $CurrentBuild + "." + $UBR
$TempTable = New-Object System.Data.DataTable
$TempTable.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
[void]$TempTable.Rows.Add($env:COMPUTERNAME,$ProductName,$Version,$OSVersion)
Return $TempTable
}
Function Convert-ParsedArray {
Param($Array)
$ArrayList = New-Object System.Collections.ArrayList
foreach ($item in $Array)
{
[void]$ArrayList.Add([PSCustomObject]@{
Update = $item.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - ')
KB = "KB" + $item.href.Split('/')[-1]
InfoURL = "https://support.microsoft.com" + $item.href
OSBuild = $item.outerHTML.Split('(OS ')[1].Split()[1] # Just for sorting
})
}
Return $ArrayList
}
If ($PSVersionTable.PSVersion.Major -ge 6)
{
$Response = Invoke-WebRequest -Uri $URI -ErrorAction Stop
}
else
{
$Response = Invoke-WebRequest -Uri $URI -UseBasicParsing -ErrorAction Stop
}
If (!($Response.Links))
{ throw "Response was not parsed as HTML"}
$VersionDataRaw = $Response.Links | where {$_.outerHTML -match "supLeftNavLink" -and $_.outerHTML -match "KB"}
$CurrentWindowsVersion = Get-MyWindowsVersion -ErrorAction Stop
If ($ListAllAvailable)
{
If ($ExcludePreview -and $ExcludeOutofBand)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview" -and $_.outerHTML -notmatch "Out-of-band"}
}
ElseIf ($ExcludePreview)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"}
}
ElseIf ($ExcludeOutofBand)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"}
}
Else
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]}
}
$UniqueList = (Convert-ParsedArray -Array $AllAvailable) | Sort OSBuild -Descending -Unique
$Table = New-Object System.Data.DataTable
[void]$Table.Columns.AddRange(@('Update','KB','InfoURL'))
foreach ($Update in $UniqueList)
{
[void]$Table.Rows.Add(
$Update.Update,
$Update.KB,
$Update.InfoURL
)
}
Return $Table
}
$CurrentPatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'} | Select -First 1
If ($ExcludePreview -and $ExcludeOutofBand)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band" -and $_.outerHTML -notmatch "Preview"} | Select -First 1
}
ElseIf ($ExcludePreview)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"} | Select -First 1
}
ElseIf ($ExcludeOutofBand)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"} | Select -First 1
}
Else
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]} | Select -First 1
}
$Table = New-Object System.Data.DataTable
[void]$Table.Columns.AddRange(@('OSVersion','OSEdition','OSBuild','CurrentInstalledUpdate','CurrentInstalledUpdateKB','CurrentInstalledUpdateInfoURL','LatestAvailableUpdate','LastestAvailableUpdateKB','LastestAvailableUpdateInfoURL'))
[void]$Table.Rows.Add(
$CurrentWindowsVersion.Version,
$CurrentWindowsVersion.'Windows Edition',
$CurrentWindowsVersion.'OS Build',
$CurrentPatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
"KB" + $CurrentPatch.href.Split('/')[-1],
"https://support.microsoft.com" + $CurrentPatch.href,
$LatestAvailablePatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
"KB" + $LatestAvailablePatch.href.Split('/')[-1],
"https://support.microsoft.com" + $LatestAvailablePatch.href
)
Return $Table
便利なオプション付きコマンド例
インストール済みの更新プログラムよりも新しいプレビュー版(Preview)や帯域外(Out-of-band)更新プログラムを「利用可能な最新更新」として表示させたくない場合は、次のコマンドを実行しましょう。累積更新プログラムだけに絞って確認できます。
Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand
また、Microsoftがお使いのOSバージョン向けに公開したすべてのWindows更新プログラムを一覧表示するには、以下のコマンドを使用します。
Get-CurrentPatchInfo -ListAvailable
一覧からプレビュー版と帯域外更新プログラムを除外しつつ、それ以外のすべてのWindows更新プログラムを表示したい場合は、次のコマンドを実行してください。
Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand
以上で完了です。スクリプトを活用すれば、更新履歴ページを開かなくてもWindows 10のパッチ状況を瞬時に把握でき、システム管理の効率が大幅に向上します。
あわせて読みたい: 「PowerShell Module Browser」サイトでは、コマンドレットやパッケージを検索できます。
-
Parallelsを使ってMacにWindowsを導入する方法を徹底解説
MacとWindowsの両方のプラットフォームを頻繁に使う方にとって、Mac上でWindows OSやアプリを利用できるのは非常に便利です。「MacはWindowsと相性が悪いのでは?」と思うかもしれませんが、実は専用アプリを使えば誰でも簡単に実現できます。MacでWindowsを導入する方法として最も人気があるのが、仮想化ソフト「Parallels Desktop」を利用する方法です。 Parallelsを使ってMacにWindowsを導入する手順 Macユーザーの中には、仕事などで必要なWindowsアプリを同じ画面で動かしたいと考えている方も多いでしょう。Parallelsを使えば、そ
-
Windows 10のPowerShellでファイルを圧縮・解凍する方法【コマンド実例付き】
ZIP機能を使うと、ファイルとその関連設定を1つのファイルにまとめて、容量を小さく圧縮できます。こうして作成したZIPファイルは、メールやその他のファイル共有サービスを通じて、簡単に他の人へ送信できるのが大きなメリットです。 ZIP圧縮といえば、WinRARや7-Zipといった専用ソフトを使うのが一般的ですが、実はWindowsに標準搭載されているPowerShellでも、追加ソフトなしでファイルの圧縮・解凍が可能です。この記事では、その具体的な手順をわかりやすく解説します。 関連記事:WindowsとMacでファイルを圧縮する方法 PowerShellでファイルをZIP圧縮する方法 まずは、