WindowsUpdateのステータスを確認するPowerShellスクリプト
通常、最新の累積的な更新プログラムがWindows 10システムにインストールされているかどうかを確認したいユーザーは、この方法を使用してWindows10の更新履歴を確認します。この投稿では、PowerShellスクリプトを使用してWindows10の現在のパッチ情報を取得する方法を紹介します。(how to get current patch information for Windows 10 using a PowerShell script.)

(PowerShell)WindowsUpdateのステータスを確認するPowerShellスクリプト
PowerShellスクリプトを使用して、Windows 10コンピューターが現在使用されているOSビルドと、デバイスで利用可能な最新の更新プログラムを報告できます(Windows 10)。また、ワークステーションが現在使用(Windows 10)されているバージョンのWindows10に対して公開された(Windows)すべてのWindowsUpdateについてレポートすることもできます。
スクリプトを実行すると、次の情報が表示されます。
- 現在のOSバージョン
- 現在のOSエディション
- 現在のOSビルド番号
- そのビルド番号、KB番号、および情報ページへのリンクに対応するインストール済みアップデート
- OSバージョンで利用可能な最新のアップデート
PowerShellスクリプトを使用してWindows10(Windows 10)の現在のパッチ情報を取得するには、 Githubの以下のコードを使用してPowerShellスクリプトを作成して実行する(create and run the PowerShell script)必要があります。
[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バージョン用に公開したすべてのWindowsUpdateを一覧表示することもできます。(Windows)
Get-CurrentPatchInfo -ListAvailable
プレビュー(Preview)と帯域外(Out-of-band)更新をリストから除外したいが、 MicrosoftがOSバージョン用に公開したすべてのWindows更新をリストしたい場合は、以下のコマンドを実行します。
Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand
それでおしまい!
次を読む(Read next):PowerShell Module Browserサイト(PowerShell Module Browser site)では、コマンドレットとパッケージを検索できます。
Related posts
PowerShell Scriptを使用してReset Windows Update Client
Fix Windows Update pageのissueボタン
Windows Update installation回を改善するためのベストプラクティス
Windows 11/10でWindows Update logを見つける場所とどのようにWindows Update logを読むか
Windows Update error 0x80240061を修正する方法
Windows Update Windows 11/10でアップデートをダウンロードする
Win Update Stop:Windows 10でWindows Updatesを無効にします
Windows 10のFix Windows Update error 0x80070422
Fix Windows Update Error 0x80070005
WindowsのUpdate Error 0X800B0101、Installerでエラーが発生しました
Windows Updateエラー0x800705B4、0x8024402F、0x80070422 [Fixed}
365日にWindows 10までにWindows Update一時停止する方法
Windows 11/10のFix Windows Update Error 0x800f0989
error code 0x8024200Dを使ってWindows Updateをインストールできませんでした
Windows 10は同じUpdateを提供またはインストールし続けます
Windows Updateインストールに失敗しました - Error 0x80070643
Windows UpdateコンポーネントをWindows 11/101にリセットする方法
Windows 10のWindows Update and Security settings
どのようにFix Windows Update Error Code 80244010へ
Windows 10のFix Windows Update error 0x80070541
