かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.167 この1年に作成したスクリプトのお気に入りトップ10(5→1)
2026年01月08日配信
執筆者:山内 和朗
前回に引き続き、2025年中に作成、紹介したスクリプトやコマンドラインテクニックの中で、皆さんに使ってもらいたいものトップ10をお送りします。いよいよトップ5の発表です。
「Windows Management Instrumentation(WMI)コマンドラインユーティリティ」(WMIC.exe)は、Windows Server 2012の時点で非推奨になり、Windows 11バージョン24H2以降およびWindows Server 2025では新規インストールでは既定でインストールされなくなりました。Windows 11バージョン25H2では削除されることが発表されています(※要確認※2025年12月末時点では削除されていません)。
この記事では、WMICコマンドを使用しているスクリプトやバイナリをディスク上から探す方法を紹介するとともに、よく使う10以上のWMICのコマンドラインを代替できるPowerShellのコマンドラインやコマンドツールを一覧にまとめています(画面1)。

画面1 WMICは今後削除される予定なので、同じ目的を実現できる別の方法(PowerShellコマンドレットなど)に慣れておこう
Windowsデバイスの回復パーティションにインストールされる「Windows回復環境(Windows Recovery Environment《WinRE》)」は、かつてはWindowsセットアップにより新規インストールされるとき、およびアップグレードインストールされるときにインストール、更新され、それ以外のタイミングで更新されることはありませんでした。それが、Windows 11バージョン22H2以降では2023年半ばから、それ以外のWindows 10/11バージョン21H2以降およびWindows Server 2022以降についても2024年1月から個別あるいは累積更新プログラムの一部として、WinREが更新されるようになりました。2024年1月から多発するようになった更新プログラムのインストール失敗については、このブログの第1回から集中的に取り上げたテーマです。
vol.1 Windowsの回復パーティションの話から始めましょう
WinREの更新は2025年10月のBリリース(2025-10 Bにも含まれていましたが、このWinREイメージ(winre.wim)には既知の問題があり、2025年10月の定例外のリリース(2025-10 OoB)以降で修正されました。既知の問題とは、WinREで起動したときに、USB接続のキーボードやマウスが機能せず、トラブルシューティング操作を実行できないという問題です。
この問題を伝えるニュース記事の中で、ローカルの回復パーティションにインストールされたWinREイメージのバージョンを確認できるスクリプト「getwinrever.ps1」を紹介しました。このスクリプトは、「reagentc /info」コマンドの実行結果からWinREの場所のパスを取得し、DISM /Get-ImageInfoコマンドの実行結果からバージョン情報を抽出します。「getwinrever.ps1」は日本語版OSを前提としていますが、言語環境に関係なく利用できる「getwinrever2.ps1」も用意しました。「getwinrever2.ps1」は、コマンドプロンプト(cmd.exe)でコードページを437(OEM-米国)に変更して「reagentc /info」を実行し、その英語表示の結果に対して文字列操作を行っています。コマンドの出力結果を対象に文字列操作を行いたい場合に応用できるテクニックだと思います(画面2)。
$winrepath = & cmd /c "chcp 437 > null && reagentc /info" | Select-String "Windows RE location" |

画面2 日本語Windows専用の「getwinrever.ps1」と、汎用版「getwinrever2.ps1」。コマンド出力を英語にするテクニックは他にも応用できるはず
「download-msedgebiz.ps1」は、Microsoft Configuration Managerに対してMicrosoft Edgeのリリースに関する方法を提供するMicrosoft EdgeのAPI「https://edgeupdates.microsoft.com/api/products?view=enterprise」を使用したスクリプトです。このAPIの使い方などは説明されていませんが、単純にWebブラウザーでこのURLにアクセスするだけで、JSONデータが返ってくるので比較的簡単にスクリプト化できます。
このスクリプトをパラメーターなしで実行すると、APIから取得できるすべての情報(Channel、Version、Platform、Architecture、Url、Hash、HashAlgorithm、SiteInBytes、PublishedTime)を返します。パラメータとしては、-Channel(Dev/Beta/Stable/Policy《ポリシーテンプレート》など)、-Platform(Windows|MacOS|Linux)、-Architecture(x86|x64|arm64) -Version(x.x.x.x|Current《最新》)を指定できます(画面3)。使い方や使用例を確認するには、Get-Help .\get-msedgebiz.ps1 -fullで確認することができます。

画面3 「download-msedgebiz.ps1」は、特定のチャネルのMicrosoft Edgeの最新バージョンを確認するために利用できる他、ダウンロードからインストールまでの自動化にも応用できる
Microsoft Updateカタログ(https://catalog.update.microsoft.com/)で公開されている更新プログラムは、固有のUpdateIDを持ち、1つのUpdateIDには1つ以上の更新プログラムパッケージが紐づいています。「get-updateids.ps1」は、KB番号またはタイトルなどのキーワードで更新プログラムを検索し、そのUpdateIDを返します。「get-downloadlinks.ps1」は、指定したUpdateIDに紐づく更新プログラムパッケージのダウンロードリンクを取得します(画面4)。Windows Update Agent(WUA) APIによるオンラインまたはオフライン検索と、これらのスクリプトを組み合わせることで、Microsoft Updateカタログからの更新プログラムのダウンロードとインストールを自動化することができます。

画面4 特定の更新プログラムのUpdateIdを検索し、そのUpdateIdを持つ更新プログラムのダウンロードリンクを取得する
「get-downloadlinks.ps1」はUpdateIDからURLとファイル名を取得できますが、その後、これらの情報に加えてファイルハッシュ(SHA1およびSHA256)情報を取得できるようにした強化版「get-downloadlinkswithhash.ps1」を作成しました。このスクリプトで取得したURLとハッシュ値を使用したダウンロードとハッシュ値の確認方法については、別のスクリプト「downloadandcheck-update.ps1」を参考にしてください。
[get-downloadlinkswithhash.ps1]
Param($UpdateId)
if ($PSBoundParameters.Count -ne 1) { Write-host "Error: -UpdateId <GUID>" ;exit 1}
$PostJson = @{size = 0; UpdateID = $UpdateId; UpdateIDInfo = $UpdateId} | ConvertTo-Json -Compress
$Body = @{UpdateIDs = "[$PostJson]"}
$ret = Invoke-WebRequest `
-Uri 'https://www.catalog.update.microsoft.com/DownloadDialog.aspx' `
-UseBasicParsing `
-Method Post `
-ContentType 'application/x-www-form-urlencoded' `
-Body $body
$pattern = "files\[(\d+)\]\.(url|digest|sha256)\s*=\s*'([^']+)'"
$map = @{}
foreach ($m in [regex]::Matches($ret, $pattern)) {
$idx = [int]$m.Groups[1].Value
$key = $m.Groups[2].Value
$val = $m.Groups[3].Value
if (-not $map.ContainsKey($idx)) {
$map[$idx] = [ordered]@{
Index = $idx
url = $null
digest = $null
sha256 = $null
fileName = $null
}
}
$map[$idx][$key] = $val
if ($key -eq 'url') {
$map[$idx]['fileName'] = [System.IO.Path]::GetFileName($val)
}
}
$items = $map.GetEnumerator() |
Sort-Object Key |
ForEach-Object { [pscustomobject]$_.Value }
$items
| 掲載記事: vol.124 WUA_SearchDownloadInstall.vbsのPowerShell化|Windowsトラブル解決 vol.125 ”更新を個別インストールしたい”を叶えるPowerShellスクリプト|Windowsトラブル解決 |
Microsoftが公開しているWindows Update用のサンプルスクリプト「WUA_SearchDownloadInstall.vbs」は、運用環境向けではありませんが、便利な機能がたくさん実装されています。一方で、Microsoftは2023年10月にVBScriptの段階的な非推奨化と将来のWindowsバージョンからの削除(時期は未定)を発表しました。
ITニュース. VBScript廃止までのタイムライン発表、ただし廃止時期は未定
そこで、「WUA_SearchDownloadInstall.vbs」の一部の機能をPowerShell化した「WUA_SearchDownloadInstall.ps1」を作成しました。利用可能な更新プログラムが複数ある場合に個別インストールを可能にする「WUA_SearchDownloadInstallS.ps1」も作成しました。「WUA_SearchDownloadInstall.ps1」は、利用可能な更新プログラムが複数ある場合に「WUA_SearchDownloadInstallS.ps1」に切り替えることができるようになっています(画面5)。
Windows Server 2022以降のSconfigユーティリティは、日本語環境において更新プログラムの個別インストールができないという問題を抱えていますが、これらのスクリプトで代用することができます。

画面5 更新プログラムの個別インストールにも対応した「WUA_SearchDownloadInstall.vbs」および「WUA_SearchDownloadInstallS.vbs」。日本語環境におけるSconfigの更新機能を代替できる
※一部のスクリプトでInvoke-WebRequestを使用していますが、Microsoftは2025年12月にWindows PowerShell 5.1(powershell.exe)のInvoke-WebRequestにセキュリティ強化のための変更を加えました。その影響で、実行時に警告メッセージが表示されることがあります(このブログでのスクリプトは修正済み)。詳しくは、以下のニュース記事を参照してください。
ITニュース. Windows PowerShell 5.1のInvoke-WebRequestに追加された警告について [2025年12月12日配信]