11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

非推奨であるwmicコマンドの代替を探す(Get-WmiObject)

Last updated at Posted at 2020-08-25

(追記)wmicの廃止スケジュールが発表されています

WMI command line (WMIC) utility deprecation: Next steps
窓の杜 WMIコマンドの廃止スケジュールが発表 ~次期Windowsで「デフォルト無効」

wmicは非推奨です

wmicは、Windowsのいろんな情報を引けるWMI(Windows Management Instrumentation)を扱うコマンド。
いまこれのヘルプを引くと「非推奨です」と表示される。

cmd
>wmic /?

WMIC は非推奨です。

公式ドキュメントには記述が見当たらないが、情報によると2012年Windows8から非推奨扱いになったんだそうで。いまも実際に非推奨と表示される以上非推奨なんだろう…

変わりなく動くのでそのまま使っているものの、非推奨だよと明記されてるものをいつまでも使い続けるのは気分が悪い。
代替か後継があるんだろうな~ってことで、PowerShellコマンドレットを探す。

引きたい情報の具体例

主にプリンタ情報を取得するのに使っていたので、それを例にする。
下のように一覧表示して目星をつけて、ポート疎通確認したりステータス調べたりする。

cmd
# プリンタ情報を取得する
# 実際は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のほうが扱いやすい。

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の代替の意味では扱いづらい。もっと別な使い方のために用意されたコマンドレットなんだろう。たぶん。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?