概要
Powershell functionでコマンドライン引数を使う方法の簡単なまとめ
基本
Paramブロック内に[型名]$パラメータ名の形式で記述する。
コマンドラインから呼び出す場合、 パラメータ名を明示的に指定する方法と、パラメータ名を指定せず値だけ渡す方法(先頭のパラメータから順に渡される)がある。
パラメータ自体を省略した場合、デフォルト値が入る。
コード:
param.ps1
function global:paramTest() {
Param([string]$Param1, [int]$Param2)
Write-Host "Param1:$Param1, Param2:$Param2"
}
実行結果:
>./param.ps1
>paramTest -Param1 abc -Param2 100
Param1:abc, Param2:100
>paramTest -Param2 3 -Param1 aaa
Param1:aaa, Param2:3
>paramTest bbb 5
Param1:bbb, Param2:5
>paramTest
Param1:, Param2:0
switchパラメータ
Paramブロックでswitchを指定することで、指定したときTrue, 無いときFalseとなるオプション引数を使うことができる。
単純にON/OFFを指定したいパラメータに使える。
コード:
switch.ps1
function global:switchTest() {
Param([switch]$Param1, [switch]$Param2)
Write-Host "Param1:$Param1, Param2:$Param2"
}
実行結果:
>./switch.ps1
>switchTest -Param1 -Param2
Param1:True, Param2:True
>switchTest -Param2
Param1:False, Param2:True
>switchTest
Param1:False, Param2:False
引数一覧をそのまま取得
$args変数を使うことで、引数一覧をそのまま取得することができる。
パラメータの個数が可変の場合を扱うのに使えそう。
コード:
args.ps1
function global:argsTest() {
Write-Host "args:$args"
}
実行結果:
>./args.ps1
>argsTest -a 1 -b 2 -c 3
args -a 1 -b 2 -c 3
パラメータ名の短縮について
コマンドライン引数でパラメータ名を指定する場合、完全な名称である必要はなく、短縮することができる。
大文字小文字関係なく前方一致で判定される。(例. パラメータ「-Abcd」は、「-abCD」でも「-aB」「-a」でも良い)
コード:
short.ps1
function global:shortTest() {
Param([string]$Abcd, [string]$Efgh)
Write-Host "Abcd:$Abcd, Efgh:$Efgh"
}
実行結果:
>./short.ps1
>shortTest -Abcd AAA -Efgh BBB
Abcd AAA Efgh BBB
>shortTest -aB AAA -eF BBB
Abcd AAA Efgh BBB
>shortTest -a AAA -E BBB
Abcd AAA Efgh BBB
>shortTest -a AAA -e BBB
Abcd AAA Efgh BBB
参考資料
以下のページを参考にしました。