2009年3月16日月曜日

そろそろWindows PowerShellに移行しようかと

今まで使っていたCMD.exe + VBSの環境を、Windows Power Shellに移行しようかと思い立った。PowerShellはMicrosoftが開発した新しいシェルで、従来のcmd.exeの置き換えを狙ったもの。歴史は意外と古く、2004年くらいに開発が開始され2006年にWindows XP/Vista/Server 2003/Server2008向けにバージョン1.0がリリースされている。現在はバージョン2.0が開発中で、CTP 3(Customer Technology Preview 3)版を入手することができる。

PowerShellを使い始めて今日で4日目。やっと慣れてきたところだ。面白いのが、PowerShell Driveという機能。この機能は今までレジストリや特殊ファイルとして扱われていたものを、ドライブとしてマウントしてしまう機能だ。Linuxの/procをイメージしてもらえればいいだろう。

標準の状態で作成されているPS DriveはGet-PSDriveコマンドで見ることができる。
PS C:\> Get-PSDrive

Name Provider Root
---- -------- ----
Alias Alias
C FileSystem C:\
cert Certificate \
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
レジストリはHKCU:とHKLM:にマッピングされているし、環境変数はEnv:にマッピングされている。面白いのがcert:で、これはWindows証明書ストアがマップされている。たとえば、以下のようにすると管理ツールの証明書で、【証明書 - 現在のユーザー】 → 【個人】 →【証明書】を選択したのと同じように証明書の一覧が表示される。
PS C:\> Get-ChildItem  cert:\CurrentUser\My\

ディレクトリ: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
06B05F0D2A93279CDB09115E33D336D40A316D5F CN=Administrator
このAdministratorの証明書はPowerShell内ではオブジェクトとして扱われるので、オブジェクト指向言語を用いたときのように、フィールドを参照したり、メソッドを実行したりすることができる。たとえば、証明書のシリアルナンバーを入手するには以下のようにする。
PS C:\> $certificate = (Get-Item cert:\CurrentUser\My\06B05F0D2A93279CDB09115E33D336D40A316D5F)

PS C:\> $certificate.SerialNumberString()
61F6573B000000000011

PowerShellには、他にもおもしろい機能がたくさんあるが、やっぱり「ls」コマンドが使えることが一番うれしい。何度、DOS窓でlsって打ってむなしい想いをしたことか...

0 件のコメント: