クライアント管理用のソフトウェアがあると簡単に解決できるのですが、これが結構高価なもので年間ライセンスで普通にクライアントPC数台買えるようなレベルだったりします。
そこでPowerShellを使ってクライアントPCにインストールされているアプリケーションの一覧を取得する方法について説明します。
準備作業
まずは準備作業として監理したいクライアントPCで、リモートからPowerShellが実行できるように設定する必要があります。クライアントPCの管理者モードのPowerShellで次のコマンドを実行するだけなんですが、1台ずつ実行していくのは結構大変です。
Enable-PSRemoting -Forceそこで次のコマンドラインをGPOのスクリプトや、ウィルス検知ソフトの管理システムなどを使って一斉に実行させます。
powershell -command "& {Enable-PSRemoting -Force}"※注意 リモートからPowerShellを実行できるようにすると、リモートからいろいろなことが実行できてしまいますので、セキュリティ上の検討をよく行ってから実行してください。
一覧の取得
次に一覧を取得するには、PC上(サーバである必要はありません)でドメイン管理者の権限でPowerShellを起動します。立ち上げたPowerShellに次のコマンドを入力して実行します。[]はオプショナル、<>内は適所修正してください。
Invoke-Command -ComputerName <コンピュータ名1>[, <コンピュータ名2>] -ScriptBlock { >> Get-WmiObject Win32_Product [-Filter "Name like '<アプリケーション名>'"]} | >> Select-Object Name, PSComputerName | >> Export-CSV -Path <出力先のパス> -Encoding Default例えば2台のPC(computer1、computer2)から名前に"Microsoft"が含まれるアプリケーションの一覧を取得して、"C:\test.csv"に出力する例は次の通りです。
Invoke-Command -ComputerName computer1, computer2 -ScriptBlock { >> Get-WmiObject Win32_Product -Filter "Name like '%Microsoft%'"} | >> Select-Object Name, PSComputerName | >> Export-CSV -Path C:\test.csv -Encoding Default出力したデータはExcelで集計するなどするとどのPCに何がインストールされているかの一覧が簡単にできると思います。
コマンドの説明
各コマンドについて軽く触れておきます。
Enable-PSRemoting
PowerShellのリモート実行を有効にします。WinRMの実行やファイヤーウォールの例外設定などが実行されます。
Disable-PSRemoting
PowerShellのリモート実行を無効にします。Enable-PSRemotingを実行すると再起動しても無効化されませんので注意してください。