http://win-enikki.blogspot.com/2010/11/usbpowershell.html
前回はUSBメモリ使用者にログオフ時にメッセージ出力するスクリプトを紹介しました。
今回は、出力ログを監視することで監視者に知らせるスクリプトを紹介します。
とりあえず、スクリプト例を以下に表示します。
$writeDir="\\buso-pcv\test" $writeTxt="usblog.txt" $tmpColor= @("Red", "Blue", "Green", "Magenta", "DarkCyan") [Void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $i = 0 #終了フラグ $cl = 0 #カラーバリエーション $watcher = New-Object System.IO.FileSystemWatcher # FileSystemWatcherの作成 $watcher.Path = $writeDir # 監視対象のフォルダ指定 $watcher.Filter = $writeTxt # フィルター $watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite $NotifyIcon = New-Object System.Windows.Forms.NotifyIcon $powerShellExe = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($powerShellExe) $notifyIcon.Icon = $icon $notifyIcon.Visible = $true Write-Host "チェック開始します。" while ($i -ge 0) { $result = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::ALL) $tmpVar = $(Get-Content "$writeDir\$writeTxt")[-1] -split "," Write-Host "" Write-Host "#########################################" Write-host "【コンピュータ】" $tmpVar[0] -ForegroundColor $tmpColor[$cl] Write-host "【ユーザー】" $tmpVar[1] -ForegroundColor $tmpColor[$cl] Write-host "【ログオフ時刻】" $tmpVar[2] -ForegroundColor $tmpColor[$cl] Write-Host "#########################################" $notifyIcon.ShowBalloonTip("1", "USBチェック", "USBメモリがささっているユーザーがいます", "Info") $cl+=1 if ($cl -eq $tmpColor.length) { $cl=0 } }
ここでのポイントはFileSystemWatcher クラスです。
FileSystemWatcher クラス
http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher%28VS.80%29.aspx
監視ログを対象に、書き込みが発生したらログの最終行を出力させる。
また、ログは変更した場合分かりやすいようtmpColorにある配列順に文字色を代えるようにしています。
ついでに、NotifyIconクラスを使用してバルーン表示もさせています。
NotifyIconクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.notifyicon%28VS.80%29.aspx
以上の結果でこのように表示されます。
出力ごとに色が変わり、バルーンも出力 |
このスクリプトは、今回だけでなく他でもログに書き込みがあった場合の監視ができるので、
色々汎用性が高いかなーとおもってます。
いかがでしょうかー。