Windows Management Instrumentation¶
WMI: Windows Management Instrumentation は、Windows OSのシステム情報の収集・監視・管理を行う仕組みです。ローカルおよびリモートを対象とします。
利用別操作方法¶
インストールされているソフトウェアの情報を取得する¶
Windows OSにWindowsインストーラ(MSI形式)を使ってインストールされているソフトウェアの情報を収集できます。インストールされているとは、コントロールパネルのプログラムのアンインストールに一覧されるソフトウェアが対象となります。
Windowsインストーラ形式ではないもの(Inno Setup、NullSoftのNSIS、他)でインストールされたソフトウェアの情報は取得できません。
ローカルコンピュータにインストールされているソフトウェア情報¶
PowerShellで以下を実行します。
PS > Get-WmiObject -Class Win32_Product | Select Name,Version | Format-List
実行結果は以下のようになります。
Name : Java 8 Update 72 (64-bit) Version : 8.0.720.15 Name : Java SE Development Kit 8 Update 72 (64-bit) Version : 8.0.720.15
リモートコンピュータにインストールされているソフトウェア情報¶
リモートコンピュータにアクセスするための認証情報(ユーザーとパスワード)を指定して実行する場合は次のコマンドとなります。
PS > $password = "hogehoge" | ConvertTo-SecureString -asPlainText -Force PS > $credential = New-Object System.Management.Automation.PSCredential("foobar",$password) PS> Get-WmiObject -Class Win32_Product -ComputerName 192.168.1.111 -Credential $credential | Select Name,Version | Format-List :(略)
クエリ(-query)で絞り込み¶
PowerShellのパイプで絞り込みをするので十分かもしれませんが、リモートの情報が大量だと全部持ってきてから絞り込むよりリモート側で絞り込んだ方がよいことがあるかもしれません。そのときは、queryオプションを指定します。
PS > Get-WmiObject -query "SELECT Name,Version FROM Win32_Product WHERE Name LIKE 'Java%'" __GENUS : 2 __CLASS : Win32_Product __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 2 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : Name : Java SE Development Kit 8 Update 72 (64-bit) Version : 8.0.720.15 PSComputerName :
PowerShellのパイプで絞り込みし特定情報を表示¶
PowerShellのパイプで絞り込みを行い、必要な項目だけを表示します。
PS > Get-WmiObject Win32_Product | where {$_.Name -match "^Java SE.*"} | foreach {Write-Host $_.Version} 8.0.720.15
名前とバージョン、識別子(Product ID)を表示します。
PS > Get-WmiObject Win32_Product | where {$_.Name -match "^Java SE.*"} | ` >> foreach {Write-Host $_.Name, $_.Version, $_.IdentifyingNumber} Java SE Development Kit 8 Update 72 (64-bit) 8.0.720.15 {64A3A4F4-B792-11D6-A78A-00B0 D0180720}