2009年12月19日土曜日

PowerShellのパラメータ属性に関するメモ

関数やスクリプトに引数を指定させる場合、
Paramブロックの中に引数名等の情報を記述できる他、
各パラメータに対して入力規則や規定値なんかも設定できます。

属性名ざっくりとした説明
[.NET Frameworkクラス名]$変数名 変数の型を指定。デフォルトでは変数には任意の型を代入可。
$変数 = デフォルト値を指定。
Position = 整数 パラメータの設定する位置を指定。
Mandatory = $True 必須指定オプションの場合に$Trueを指定。
ValueFromPipeline = $True パイプラインから流れてきたオブジェクトそのものを使用できるようにする場合に指定。
ValueFromPipelineByPropertyName = $True パイプラインから流れてきたオブジェクトの持つプロパティとパラメータをバインドする場合に指定。
ParameterSetName = パラメータセット名 パラメータセット名を指定。省略時は、全パラメータセットに含まれると見なされる。
HelpMessage = 説明メッセージ パラメータの説明メッセージを指定。

実装例:
sample1.ps1とsample2.ps1からは、同一の出力が得られます。
# sample1.ps1
Function Test-Sample01
{
Param
(
# パイプラインより受けとったオブジェクトの、Nameプロパティの内容を受け取る。
[Parameter(Position=0, Mandatory = $True, ValueFromPipelineByPropertyName = $True)]$Name,
[Parameter(Position=1, Mandatory = $True)][string]$MyString,
# スイッチパラメータの指定
[Parameter(Position=2)][switch]$MySwitch
)
Process
{ $Name + $MyString +$MySwitch.ToString() | Out-Host }
}
Get-Process | Test-Sample01 -MyString "Test" -MySwitch

# sample2.ps1
Function Test-Sample02
{
Param
(
# パイプラインより受け取ったオブジェクトをそのまま使用。
[Parameter(Position=0, Mandatory = $True, ValueFromPipeline = $True)]$Object,
# 変数MyStringのデフォルト値は"Test"
[Parameter(Position=1, HelpMessage="My string...")][string]$MyString = "Test",
[Parameter(Position=2)][switch]$MySwitch
)
Process
{ $Object.Name + $MyString + $MySwitch.ToString()| Out-Host}
}
Get-Process | Test-Sample02 -MySwitch



参考サイト:
スクリプトセンター(TechNet)
IIS 7.0 向けの PowerShell コマンドレットの作成(TechNet)
Hiro's .NET Blog
パラメータセットの説明

参考コマンド:

Get-Help About_Functions_Advanced_Parameters

0 件のコメント: