Windows PowerShell 2.0 CTP(2)スクリプトコマンドレット

Script Cmdlets(スクリプトコマンドレット)

Windows PowerShell 2.0 CTP には「Script Cmdlets」という機能があります。
Ver.1.0でオリジナルのコマンドレットを作成するには、VBC#で開発し、スナップインとして登録する必要がありました。
#それなりに手間の必要な作業だったりします。(^^;


Ver.2.0では、PowerShellスクリプトでオリジナルコマンドレットを作成できるようになりました。
これがScript Cmdletsという機能です。


さて、Ver.2.0 CTPをインストールすると、以下のディレクトリにトピックと呼ばれるヘルプテキストが登録されますが、

%WinDir%\System32\WindowsPowerShell\v1.0\en-US

Script Cmdletsに関する記述は、以下のトピックに書かれています。

  • about_scriptcmdlets.help.txt
  • about_scriptcmdletattributes.help.txt
  • about_scriptcmdletmethods.help.txt
  • about_scriptcmdletparameters.help.txt
スクリプトコマンドレットのメリット

Ver.1.0から、関数(Function)ならばスクリプトで記述することができました。
VBC#でわざわざコマンドレットを実装しなくても、たいていのことは、関数で事足りました。


では、あえて、スクリプトでコマンドレットを作成するメリットは何でしょうか?


それは、関数では利用できない、コマンドレット独自の機能が利用できることです。


例えば「ShouldProcess」機能が挙げられます。
「ShouldProcess」は、オペレーションの実行前に処理の検証を行う仕組みです。
Stop-Processのように、実行に慎重を要するコマンドレットが「ShouldProcess」機能を備えています。
スクリプトコマンドレットでは、この「ShouldProcess」機能が利用可能です。

サンプル

以下は、メモ帳のプロセスを終了する「スクリプトコマンドレット」です。

Cmdlet Kill-Notepad -SupportsShouldProcess
{
    Param ()
    Begin{}
    Process{Get-Process Notepad | Stop-Process}
    End{}
}
実行結果1:オプション指定なし
PS C:\> Kill-Notepad

メモ帳は終了します。

実行結果2:Confirmオプションを付けて実行
PS C:\> Kill-Notepad -Confirm

Confirm
Are you sure you want to perform this action?
Performing operation "Stop-Process" on Target "notepad (4332)".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Stop-Processに対してConfirmオプションが有効になり、メモ帳を終了するかをユーザに確認します。

実行結果3:WhatIfオプションを付けて実行
PS C:\> Kill-Notepad -WhatIf
What if: Performing operation "Stop-Process" on Target "notepad (5860)".

Stop-Processに対してWhatIfオプションが有効にし、疑似実行します。
実際にはメモ帳のプロセスは終了しません。