かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.61 Windows 11 24H2ではWMICが既定で無効の件|最新OSのここに注目(注意)!

 

 

vol.61 Windows 11 24H2ではWMICが既定で無効の件|最新OSのここに注目(注意)!

2024年11月18日配信
執筆者:山内 和朗

 Windows 11バージョン24H2(2024 Update)が正式リリースされてから1か月以上経ちました。リリースされたその日にいち早くアップデートした私がこれまで使ってきて気付いた注目点を紹介します。注目点と言っても、新機能については多くのメディアで報道されています。ここでは管理者やユーザーが注意するべき仕様変更や不具合情報をお届けします。

 

 Windows 11バージョン24H2では、長い間Windowsに標準搭載されていた「WMIコマンドラインユーティリティ(WMIC.exe)」が既定で無効になりました。Windows 11バージョン23H2以前からのアップデート(アップグレード)の場合は引き続きWMICコマンドは使用可能です。影響は新規インストールからです。

 

 この連載の以下の回では、WMICコマンドが既に非推奨であって、既定で無効にされた後(バージョン24H2にて)、将来的に削除されることをお伝えしました。そして、もっと他に方法があるのになぜか多用されている、WMICコマンドによるコンピューター名の変更の代替方法を紹介しました。

vol.42 Windowsのコンピューター名を変更する|コマンド&スクリプト強化週間

 

WMICコマンドがログオン/スタートアップスクリプトや管理用バッチに残っていませんか?

 

 WMICコマンドは、Windows 11バージョン22H2のときにオンデマンド機能(オプション機能)となりましたが、これまでは既定で有効(インストール済み/追加済み状態)になっていました。先月リリースされたWindows 11バージョン24H2においてもオンデマンド機能であることに変わりはありませんが、新規インストールでは既定で無効(存在しない状態)になります。Windows 11バージョン23H2以前を実行していたデバイスがWindows 11バージョン24H2にアップデート(アップグレード)された場合は、追加作業なしで引き続きWMICコマンドを利用できます。Windows Serverの最新の長期サービスチャネル(LTSC)であるWindows Server 2025もまた、Windows 11バージョン24H2と同様に、新規インストールではWMICコマンドが無効です。そのため、すぐに影響はでないかもしれませんが、Windows 11バージョン24H2やWindows Server 2025がプリインストールされたデバイスが導入されたり、仮想マシン(VM)に新規インストールしたりすると、見逃していた影響が健在化する可能性があります。


 影響の例としては、ログオンスクリプトやスタートアップスクリプト、あるいは管理用のバッチスクリプトでのWMICコマンドの使用です。次のサンプルスクリプト「test.cmd」(拡張子は.batでも同じ)は、Windows Server、Windows 10、Windows 11をWMICコマンドの実行結果から識別するバッチファイルです。識別されたOSの情報をコンソール出力するだけの簡単なものですが、こういったスクリプトを使用して、管理タスクを自動化することはよくあることだと思います。WMICが非推奨と宣言されてからは、このようなスクリプトは将来機能しなくなる可能性があるため、現在も残っているとしたら今後問題になります。

[test.cmd]プレーンテキストで表示

@ECHO OFF
WMIC OS GET CAPTION |Find "Microsoft Windows Server" > Nul
IF %ERRORLEVEL% == 0 GOTO WINSERVERS
WMIC OS GET CAPTION |Find "Microsoft Windows 10" > Nul
IF %ERRORLEVEL% == 0 GOTO WIN10PCS
WMIC OS GET CAPTION |Find "Microsoft Windows 11" > Nul
IF %ERRORLEVEL% == 0 GOTO WIN11PCS
GOTO END

:WINSERVERS
ECHO This device running Windows Server.
GOTO END

:WIN10PCS
ECHO This device running Windows 10.
GOTO END

:WIN11PCS
ECHO This device running Windows 11.
GOTO END

:END
ECHO END

 

 画面1は、Windows 11バージョン23H2から機能更新プログラムによってバージョン24H2にアップデートされたデバイスでの実行結果です。WMICコマンドは引き続き利用可能であるため、影響はありません。これに対して、画面2は、Windows 11バージョン24H2を新規インストールしたデバイスです。バッチスクリプトはWMICコマンドが見つからないため失敗します。

 

画面1
画面1 以前のバージョンからアップグレードされたWindows 11バージョン24H2では、WMICコマンドを含むOS識別バッチスクリプトは問題なく動作

 

画面2
画面2 Windows 11バージョン24H2の新規インストール環境では、WMICコマンドが存在しないため同じバッチスクリプトはエラーで失敗する

 

解決策その1-バッチスクリプトの修正

 

 このバッチスクリプトのような問題に遭遇した場合は、根本原因となっているバッチスクリプトを修正するのが対処方法の1つです。バッチスクリプトを変更する、PowerShellスクリプトに移行するなど、方法はいくつかありますが、今回は「test.cmd」の「WMIC OS GET CAPTION」を「powershell.exe -Command "& {(Get-CimInstance -ClassName Win32_OperatingSystem).Caption}"」に置き換えることで対処しました。修正後の「testv2.cmd」はこれでWMICコマンド非依存になります(画面3)。PowerShellスクリプトにしたほうがすっきりすると思われるかもしれませんが、PowerShellスクリプトの場合は対象デバイスごとに実行ポリシーを変更(RemoteSignedなどに)しなければならないことがあります。今回の修正例はその必要がありません。


[testv2.cmd]プレーンテキストで表示

@ECHO OFF
powershell.exe -Command "& {(Get-CimInstance -ClassName Win32_OperatingSystem).Caption}" |Find "Microsoft Windows Server" > Nul
IF %ERRORLEVEL% == 0 GOTO WINSERVERS
powershell.exe -Command "& {(Get-CimInstance -ClassName Win32_OperatingSystem).Caption}" |Find "Microsoft Windows 10" > Nul
IF %ERRORLEVEL% == 0 GOTO WIN10PCS
powershell.exe -Command "& {(Get-CimInstance -ClassName Win32_OperatingSystem).Caption}" |Find "Microsoft Windows 11" > Nul
IF %ERRORLEVEL% == 0 GOTO WIN11PCS
GOTO END

:WINSERVERS
ECHO This device running Windows Server.
GOTO END

:WIN10PCS
ECHO This device running Windows 10.
GOTO END

:WIN11PCS
ECHO This device running Windows 11.
GOTO END

:END
ECHO END

 

画面3

画面3 WMICコマンドを「powershell.exe」から始まるコマンドラインに変更することでWMICコマンド非依存になり、問題が解消

 

解決策その2-WMICコマンドの有効化(非推奨)

 

 対処するべきバッチスクリプトが数多くある可能性があり、その調査と修正に時間がかかる場合は、新しいバージョンのWindowsでWMICコマンドを有効化して問題の解決を先送りすることもできます。ただし、将来のWindowsバージョンからWMICコマンドが完全に削除されるまでに対処する必要があることに注意してください。

 Windows 11バージョン24H2およびWindows Server 2025デスクトップエクスペリエンスの場合は、「設定」アプリの「システム|オプション機能|オプション機能を追加する」から「WMIC」を検索して選択し、「次へ」「追加」をクリックして有効化します(画面4)。Windows Server 2025のServer Coreインストールの場合は、PowerShellで次のコマンドラインを実行することで、WMICコマンドを有効にすることができます。なお、Add-WindowsCapabilityの方法は、Windows 11やWindows Server 2025デスクトップエクスペリエンス環境でも使用できます(画面5)。

 

PS C:¥> Add-WindowsCapability -Online -Name WMIC~~~~

 

画面4
画面4 「設定」アプリの「オプションの機能を追加する」から「WMIC」を選択して追加する

 

画面5
画面5 Add-WindowsCapabilityを使用して「WMIC~~~~」を有効にする

 なお、WMICコマンドの非推奨や無効化は、コマンドが利用できなくなるだけで、WMI(Windows Management Instrumentation)が非推奨になるわけではないことに留意してください。Get-CimInstanceやGet-CimObjectコマンドレット、Win32 API(WMIクラス)などからのアクセスには影響しません。例えば、Active Directoryのグループポリシーは「WMIフィルター」で適用対象を制御できますが、このWMIフィルターの使用にもWMICコマンドの無効化はまったく影響しません。

 

 ところで、最近、「Windows 9はなぜ存在しないのか?」という記事を見かけました。いろいろな説が紹介されていましたが、1つ重要で有力な説が抜けていると感じました。それは、今回のWMICコマンドを含むサンプルスクリプトのように、「Windows 9」でWindows 95、Windows 98、Windows 98 Second Editionをまとめて識別するようなレガシなコードやスクリプトが残っている可能性への配慮です。

 

WMICコマンドの次はVBScript

 

 WMICコマンドはWindows 11バージョン22H2でオンデマンド機能化され、今回バージョン24H2において新規インストールで既定で無効になりました。以下の記事にあるように、Microsoftは2023年10月に「Visual Basic Scripting Edition(VBScript)」の非推奨化を発表し、2024年5月に廃止までのタイムラインを公開しました。Windows 11バージョン24H2は非推奨フェーズ1にあたり、予告通り、このバージョンからVBScrpitはオンデマンド機能(オプション機能)に変更されました(画面6)。現在は既定で有効(インストール済み/追加済み状態)であるため影響はありませんが、将来のバージョンでWMICコマンドと同じように、既定で無効に切り替わることになります。

ITニュース. VBScript廃止までのタイムライン発表、ただし廃止時期は未定

画面6

画面6 公表された廃止までのタイムラインの予告通り、Windows 11バージョン24H2から、VBScriptがオンデマンド機能(VBSCRIPT~~~~)になった

blog_yamanxworld_subscribe

blog_yamanxworld_comment

blog_yamanxworld_WP_2024fh_TOP5

最新記事