(追記)wmicの廃止スケジュールが発表されています
WMI command line (WMIC) utility deprecation: Next steps
窓の杜 WMIコマンドの廃止スケジュールが発表 ~次期Windowsで「デフォルト無効」
wmicは非推奨です
wmic
は、Windowsのいろんな情報を引けるWMI(Windows Management Instrumentation)を扱うコマンド。
いまこれのヘルプを引くと「非推奨です」と表示される。
>wmic /?
WMIC は非推奨です。
公式ドキュメントには記述が見当たらないが、情報によると2012年Windows8から非推奨扱いになったんだそうで。いまも実際に非推奨と表示される以上非推奨なんだろう…
変わりなく動くのでそのまま使っているものの、非推奨だよと明記されてるものをいつまでも使い続けるのは気分が悪い。
代替か後継があるんだろうな~ってことで、PowerShellコマンドレットを探す。
引きたい情報の具体例
主にプリンタ情報を取得するのに使っていたので、それを例にする。
下のように一覧表示して目星をつけて、ポート疎通確認したりステータス調べたりする。
# プリンタ情報を取得する
# 実際はnodeを取得したい先のホスト名にする
wmic /node:"localhost" printer get Name,Default,Status,PortName
Default Name PortName Status
FALSE Microsoft Print to PDF PORTPROMPT: Unknown
FALSE Fax SHRFAX: Unknown
TRUE DocumentPrinter 192.0.2.71 Unknown
Get-WmiObjectコマンドレット
Get-WmiObject
Get-WmiObject
という、いかにもWMI取り扱いですよという名前のコマンドレットがある。これでWin32_Printer
クラスを呼んでやれば求める結果が返ってくる。パラメータ指定もおおむね似通った感じで書けて、結果も似たようなものになる。
出力をどうこうしたい場合もPowerShellのほうが扱いやすい。
Get-WmiObject -Class Win32_Printer -ComputerName "localhost" | select Default,Name,Portname,Status
Default Name Portname Status
------- ---- -------- ------
False Microsoft Print to PDF PORTPROMPT: Unknown
False Fax SHRFAX: Unknown
True DocumentPrinter 192.0.2.71 Unknown
代替としてはこれでいいだろう。
他に得たいプロパティがあれば、select *
で表示して必要なものを探すこと。86個も出てきてそんなにいらねえよってなった。
Computer System Hardware Classes
Get-WmiObject
を使って、他にも様々な情報を読み出せる。
多すぎて一覧は無理なので、欲しいものがあったら公式で探すといい。
Computer System Hardware Classes
Get-Printerコマンドレット?
Get-Printer
Get-Printerという、これまたいかにもプリンタ取り扱いですよという名前のコマンドレットもある。
こちらは得られる情報の種類が異なっている。例えばDefault
プロパティとStatus
プロパティは同じ名前では存在しないようで、出てこない。
ComputerName
パラメータをlocalhostにすると返事がやたら遅かったり、なんか挙動不審。(hostnameを明記すれば早い)
Get-Printer -ComputerName "hostname" | select Default,Name,Portname,Status
Default Name Portname Status
------- ---- -------- ------
Microsoft Print to PDF PORTPROMPT:
Fax SHRFAX:
DocumentPrinter 192.0.2.71
select *
で調べてみるとGet-WmiObject Win32_Printer
とはだいぶ違うプロパティを持っている。CimInstanceProperties
プロパティの中にあれこれ情報が埋まっているようだ。(例示は省略)
こちらはwmic
の代替の意味では扱いづらい。もっと別な使い方のために用意されたコマンドレットなんだろう。たぶん。