2010/11/10

USBメモリ抜き忘れ防止スクリプトをPowerShellでやってみる

久々にPowerShellを使う機会にめぐまれたので、投稿します。

USBメモリ、今では安価となりかなり利用率は増えましたが
それと同時にメモリの抜き忘れも増えているみたいです。
なんとかならんのかー、という要望があったので
折角なのでPowerShellでログオフ時にUSBメモリがささっているとダイアログを出すスクリプトを作ってみました。
ちなみに、色々ネット上にある参考スクリプトをツギハギしたりしています。
使用時は自己責任でお願いします ><


とりあえず、1つ目のポイントとして、USBメモリの有無確認ですが、
win32_usbhub クラスを利用することでみつけることができます。

Win32_USBHub クラス - WMI Fun !!
http://www.wmifun.net/library/win32_usbhub.html

USBメモリの場合、Nameが "USB 大容量記憶装置"であり、
Statusが"OK"であれば、ほぼちゃんと認識された状態のUSBメモリがささっているといえます。
Get-WmiObject -Class win32_usbhub | ? { $_.name -eq "USB 大容量記憶装置" } | ? { $_.status -eq  "OK" }
USBメモリをさしていた場合

あとは、ダイアログとして出すようにスクリプトを組めば完成です。
詳細は以下。
#USBログオフ時メッセージプロンプト処理
#メッセージ文
$messagePath="C:\temp\usbmessage.txt"
#ログ出力パス
$usbLOG="\\buso-pcv\test\usblog.txt"

#--------------------------------------
#メッセージボックス
#--------------------------------------
function MessageBox([string]$p_value = "")
{
    [Void][Windows.Forms.MessageBox]::Show($p_value,"お知らせ","OK", "Warning")
}


$crUSB = Get-WmiObject -Class win32_usbhub | ? { $_.name -eq "USB 大容量記憶装置" } | ? { $_.status -eq  "OK" }


if ($crUSB) {
    write-output "$env:computername,$env:username,$(get-date)" >> $usbLOG

    #Windowsフォームのロード
    [Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms");

    MessageBox $([String]::Join("`r`n", (Get-Content $messagePath)))
   
}
 メッセージ文は、いろんな人が編集する場所でもあることから、
別テキストからの呼び出しに 。(ここでは "C:\temp\usbmessage.txt")
以下のようにusbmessage.txtに書いてみました。
USBがさしっぱなしだぞー( ゚Д゚)
誰かに盗まれても知らないぞ( ´∀`)
って、席にもういないッッΣΣ(゚Д゚;)
また、ダイヤログが出たときに、使用者のホスト名、ユーザー名、時刻を吐き出すようにしてみました。
このスクリプトをログオフスクリプトとして設置しておけば完了です。
実際に使用するとこんな感じ。
USB差しっぱなしでログオフした場合

usblogに記録されたログ

ちなみにGPOでPowershellのログオフスクリプトを管理する場合には、
スクリプト実行ポリシーを有効にすることと、PowerShell用のタブが別途あるので注意しましょう。
(あと、もちろん適用環境ではPowerShellがインストールされていることが前提です(笑))


GPOによるスクリプト実行ポリシーの許可

ログオフスクリプトのPowerShellタブ

また、「ハードウェアの安全な取り外し」を行わなくても大丈夫か?という点については
書き込み中でなければ、ほぼ問題ないとのこと。
ログオフ後なら なおのこと その後ぬいても問題ないでしょう。
どうしても怖いというのであれば、もう一度ログインして手順を踏んで抜いてもらうということで。

USBメモリやUSB HDDを安心して取り外す - ITmedia
http://bizmakoto.jp/bizid/articles/0710/03/news062.html


さて、これで使用者には注意を促しましたが、上記のメッセージにある通り
そもそも、使用者はログオフボタンを押した時点で皆 律儀に席に座っているとはかぎりません。

なので、USBメモリをさしてログオフした人を管理者へ知らせるスクリプトも作ってみました。

今回は長くなったので、スクリプトについてはまた次回。
ちなみに動作としてはこんな感じに出力させました。
USBメモリさし忘れ監視
ログを監視し続けて、書き込みがあったら出力、ついでにポップアップ表示もさせています。
では、また次回。(といって、またえらく時間あいたら嫌だな・・)

スポンサーリンク

スポンサーリンク