Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@nijinagome

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

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

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nijinagome
PowerShellであれこれやることを学んでいます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?