Translate

2017年8月1日火曜日

PowerShellを使って特定のプログラムがインストールされているPCを調べる

 多数のPCを管理しているとどのPCにどのプログラムがインストールされているか把握しきれなくなってきます。記録を残して管理をしていても、記入漏れが発生したり、ユーザー自身がインストールしていることも・・・。
 そこで今回はPowerShellを使って、特定のプログラムがインストールされているPCからメールを送信する方法について説明します。
 FlashPlayerなんて勝手にインストールされるくせに、アップデートされずセキュリティホールだらけの古いバージョンが放置されるなんて日常茶飯事なので・・・。

PowerShellのスクリプトファイルを作る

 適当なファイル名、例えば「CheckProgram.ps1」などでスクリプトファイルを作成します。

CheckProgram.ps1の内容

Param(
[string]$program
)

$value = (Get-WmiObject -Class Win32_Product | Select-Object Name, Version | Select-String $program)

if ($value -ne $null) {
    $subject = $program + "が検出されました。"
    $computer = $env:COMPUTERNAME
    $encoding = [System.Text.Encoding]::UTF8
    $body = "Computer: " + $computer + "`r`n" + $value

    Send-MailMessage -to "to@example.com" -from "from@example.com" -subject $subject -body $body -encoding $encoding -SmtpServer "mail.example.com"
}
 プログラムの名称に引数「-program」で指定した文字列を含む場合、そのコンピュータ名とプログラム名、バージョンが「to@example.com」にメールが送られるようになります。
 Send-MailMessageの引数「-to」「-from」「-SmtpServer」は適所変更してください。

GPOでタスクスケジュールに登録する

 上で作成したスクリプトをタスクスケジュールで実行させます。トリガーの設定は適当に設定してください。
 新しく操作を追加し、操作には「プログラムの開始」、「プログラム/スクリプト」「引数の追加(オプション)」には下記の内容を設定します。

プログラム/スクリプト

powershell

引数の追加(オプション)

-NoProfile -ExecutionPolicy Bypass "\\example\scripts\CheckProgram.ps1" -program "Flash Player"
"\\example\scripts\CheckProgram.ps1"はスクリプトを保存したフルパスを指定します。
引数「-program」の後ろ("Flash Player")を変えることで別のプログラムの監視も出来ます。

0 件のコメント :

コメントを投稿