Windows PowerShell

Windows Server でユーザごとのディスクの使用量についてレポートするワンライナーPowerShell で書いてみた。

Get-ChildItem 'C:\Documents and Settings' | foreach-object {$_.name + "," + (Get-ChildItem ("C:\Documents and Settings\" + $_.name) -force -recurse | Measure-object length -sum).sum / 1mb + "," + (Get-ChildItem ("C:\Documents and Settings\" + $_.name + "\Local Settings\Temporary Internet Files") -force -recurse | Measure-object length -sum).sum / 1mb } | Tee-Object c:\powershell_result.txt

PowerShell を書くのは初めてなので、もっとスマートに書ける部分もあるだろうし、
エラー処理もしていなかったりするが、目的は充分に果たせた。


PowerShell は雑誌等でときどき見かけるものの、
周囲で話を全然聞かないので、普及しているという印象をあまり持っていない。

しかし、使ってみるとやはり便利だ。覚えて損はない。
パイプでオブジェクトが渡せるので、データを整理するのが簡単にできるようになっている。
WindowsGUI を使わずに役割の追加ができたりする。
システム管理者向けに設計されたスクリプトだけのことはある。


読んだ書籍では、マイクロソフトの公式解説書が、基本的な事項の説明と目的別のリファレンスがまとまっていて分かりやすかった。
PowerShell V2 にも対応している。

以下の本も読んだが、自分には向いていなかった。
コマンドレットが「動詞 - 名詞」であることや、「集合志向」であることなど、
PowerShell の設計思想的なところを説明してあるのは良いのだが、
それ以上に著者の意見が繰り返し語られるのが鼻につく。

基本的な事項の説明は全くされていないのに、
著者が見つけたバグの説明には数ページ割かれていたり、
初学者には向かない内容だった。


学習する前は PowerShell を使えばメールの送信なども簡単にできるものだと勝手に想像していたが、上記 2冊にそのような説明はなく、
Windows という巨大なデータベース」から情報を取り出す方法の説明ばかりだった。

PowerShell .Net と連携できるということなので、.Net のクラスを使えという話なのかもしれない。
まだ読んでいないが、PowerShell 開発者が書いた以下の本を読めば、.Net の利用についても理解できそうだ。