WMI タスク: コンピューター ソフトウェア
[アーティクル] 07/03/2023
6 人の共同作成者
フィードバック
この記事の内容
コンピューター ソフトウェアの WMI タスクでは、Microsoft Windows インストーラー (MSI) によってインストールされているソフトウェアやソフトウェアのバージョンなどの情報を取得します。 その他の例については、https://www.microsoft.com/technet の TechNet ScriptCenter を参照してください。
このトピックに示したスクリプト例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続 」を参照してください。
以下の手順では、スクリプトの実行方法を説明します。
スクリプトを実行するには
コードをコピーし、拡張子 .vbs を付けたファイル (filename.vbs など) に保存します。 テキスト エディターによってファイルに .txt 拡張子が追加されていないことを確認します。
コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
コマンド プロンプトで「cscript filename.vbs 」と入力します。
イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護されている場合があります。
注意
既定では、cscript により、コマンド プロンプト ウィンドウにスクリプトの出力が表示されます。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプトで「cscript filename.vbs > outfile.txt 」と入力し、filename.vbs スクリプトの出力を outfile.txt にリダイレクトします。
注意
"Select * from Win32_Product" クエリを実行すると、予期しない動作が発生する可能性があります。 これは、Win32_Product をサポートするプロバイダーがクエリ最適化されていないためです。 詳細については、サポート技術情報の記事 974524 を参照してください。
次の表に、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例の一覧を示します。
スクリプトを使用してソフトウェアをアンインストールする
ソフトウェアが Microsoft Windows インストーラー (MSI) を使用してインストールされている場合は、WMI クラス Win32_Product と Uninstall メソッドを使用します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product " _
& "Where Name = 'Personnel database'")
For Each objSoftware in colSoftware
objSoftware.Uninstall()
Next
$colSoftware = Get-WmiObject -Class Win32_Product | Where-Object {$_.name -eq "Personnel database"}
foreach ($colItem in $colSoftware)
{
$colItem.Uninstall()
}
スクリプトを使用してコンピューターにインストールされているすべてのソフトウェアをインベントリする
ソフトウェアが Microsoft Windows インストーラー (MSI) を使用してインストールされている場合は、WMI クラス Win32_Product を使用します。
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colSoftware = objWMIService.ExecQuery _ ("Select * from Win32_Product")
For Each objSoftware in colSoftware
Wscript.Echo "Name: " & objSoftware.Name
Wscript.Echo "Version: " & objSoftware.Version
Next
$colSoftware = Get-WmiObject -Class Win32_Product
foreach ($colItem in $colSoftware)
{
"Name: " + $colItem.Name
"Version: "+ $colItem.Version
}
インストールされている Microsoft Office のバージョンを確認する
Win32_Product クラスを使用して、Version プロパティの値をチェックします。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery(_
"Select * from Win32_Product " & _
"Where IdentifyingNumber =" _
& " '{90280409-6000-11D3-8CFE-0050048383C9}'")
For Each objItem in colSoftware
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Version: " & objItem.Version
Next
$colSoftware = Get-WmiObject -Class Win32_Product | Where-Object {$_.IdentifyingNumber -eq "{90280409-6000-11D3-8CFE-0050048383C9}"}
foreach ($colItem in $colSoftware)
{
"Name: " + $colItem.Name
"Version: " + $colItem.Version
}
例
PowerShell リモート PC 情報スクリプト PowerShell コード サンプルでは、Win32Product を含む多くのハードウェアおよびソフトウェア クラスを使用して、WMI とリモート レジストリでリモート PC に関するさまざまな情報を検索します。
スクリプトおよびアプリケーション用の WMI タスク
WMI C++ アプリケーションの例
TechNet ScriptCenter