PowerShell スクリプトで引数を受け取る方法です。
非常に多くの機能が実装されていますが、利用頻度の高い機能を中心に紹介したいと思います。
バッチや VBS と同様の手法
PowerShell スクリプトでは引数は自動的に $Args[] に格納されます。
第一引数は $Args[0]、第二引数は $Args[1] といった形で引き渡されます。
# C:\Sample.ps1
Write-Host $Args[0]
Write-Host $Args[1]
引数をあらかじめ宣言する手法
最小限の宣言
Powershell スクリプト内にあらかじめ引数を宣言しておくことで、スクリプト実行時に引数の指定が出来ます。また、シェルで補完機能が利用できるようになります。
冒頭に Param 属性を構成します。
# C:\Sample2.ps1
Param($Arg1,$Arg2) #第一引数を$Arg1,第二引数を$Arg2に格納する
Write-Host $Arg1
Write-Host $Arg2
また、明示的にどの引数に値を渡すか指定も可能です。
実行時に「.\Sample2.ps1 -」まで打って Tab ボタンを押すと、自動で Arg1 と補完されます。2回押すと Arg2 が補完されます。
また、Param() 内は改行しても問題ありません。ただし、複数定義する場合はカンマを入れる必要があるので注意してください。
Param(
$Arg1, #カンマが必要
$Arg2
)
引数の型を宣言する
あらかじめ受け取る引数の型を宣言することができます。
引数の前に [型] を付与します。
# C:\Sample3.ps1
Param(
[String]$Arg1, #$Arg1は文字列型,
[Int]$Arg2 #$Arg2は整数型で宣言
)
Write-Host $Arg1
Write-Host $Arg2
宣言した型以外の引数を渡すとエラーが返ります。
引数に初期値をセットする
引数に初期値をセットできます。
# C:\Sample4.ps1
Param(
[String]$Arg1 = "Test1",
[Int]$Arg2 = 123
)
Write-Host $Arg1
Write-Host $Arg2
引数を指定しなければ初期値が利用されます。
また初期値に環境変数やコマンドレットの結果をセットすることも可能です。
# C:\Sample5.ps1
Param(
[String]$Hostname = $Env:COMPUTERNAME, #ホスト名を初期値に設定
[Datetime]$Date = (Get-Date) #現在日時を初期値に設定
)
Write-Host $Hostname
Write-Host $Date
その他 Tips
引数を必須パラメーターとする
以下の Parameter 属性を設定し、引数を必須とすることができます。
[parameter(mandatory=$true)]
PoweShell 3.0 以降であれば $true を省略することも可能です。
# C:\Sample6.ps1
Param(
[parameter(mandatory=$true)][String]$Arg1,
[parameter(mandatory=$true)][int]$Arg2
)
Write-Host $Arg1
Write-Host $Arg2
決められた値以外受け付けない
以下の Validate 属性を設定し、指定したパラメータ以外受け付けないようにすることができます。
[ValidateSet(“aaa”,”bbb”)]
# C:\Sample7.ps1
Param(
[ValidateSet("Test1","Test2")][String]$Arg1,
[ValidateSet("123","321")][int]$Arg2
)
Write-Host $Arg1
Write-Host $Arg2
他にもたくさんの機能があります。詳細は以下 URL が非常に参考になるので、必要に応じて確認してください。
About Functions Advanced Parameters
コメント
[…] Powershell で引数を受け取る | マイクロソフ党ブログ […]