こんにちは。
けいぞうです。
今回は「PowerShellの関数の引数の受け取り方」についての記事になります。
[目次]
- PowerShellの関数の引数の受け取り方まとめ
- パラメータリストを用いた方法
- $Args変数を用いた方法
- paramブロックを用いた方法
PowerShellの関数の引数の受け取り方まとめ
PowerShell関数で引数(パラメータ)を指定する方法は3つあります。
■1つ目はパラメータリストを記述する方法
function 関数名 (パラメータリスト)
{
# 処理
}
■ 2つ目は$Args関数を用いる方法
function 関数名
{
$Args[0] #先頭の引数
$Args[1] #次の引数
・・・
}
■ 3つ目の方法は、paramブロックを用いる方法
function 関数名
{
param(パラメーター)
}
パラメータリストを用いた方法
この方法が最も一般的で、ほかの言語とも近い書き方です。
例えばint型のパラメータを1つ受け取れる関数は以下のように記述します。
function func([int]$num)
{
# 処理
}
また、型は省略して書くことができます。省略した場合は、呼び出し側で渡された型がそのまま使われます。
function func($num)
{
# 処理
}
他の言語と同様に、デフォルトの値を指定することもできます。
function func([int]$num = 524)
{
# 処理
}
呼び出し側で引数が指定されなかった場合は、関数の中でこのデフォルト値が使われます。
$Args変数を用いた方法
呼び出し側で渡されたパラメータは、$Argsという配列に自動的に追加されます。以下のように使うことが可能です。
>function func
>>{
>> $Args[0]
>> $Args[1]
>>}
> func 1 "test"
1
"testtest"
また、一般的なパラメータリストと$Args変数を併用することも可能です。
例えば、パラメータリストに1つのint型変数を指定していた場合に、呼び出し側で引数を2つ以上渡したら、2つ目以降の引数は$Argsに追加されます。
function func([int]$num)
{
$num
$Args[0]
$Args[1]
}
>func 1 2 "test"
1
2
test
paramブロックを用いた方法
あんまり見ない書き方ですが、paramブロックの中にパラメータを指定するという記述方法もあります。
function func
{
param(
[int]$num,
[string]$str
)
$num
$str
}
paramブロックと普通のパラメータリストを併用したらどうなるでしょうか?
function func([int]$num1)
{
param(
[int]$num2
)
$num1
$num2
}
発生場所 行:3 文字:5
+ param(
+ ~~~~~~
function の宣言に引数が指定されている場合、param ステートメントを使用できません。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : OnlyOneParameterListAllowed
エラーになりました。
paramブロックと通常のパラメータリストは併用できないようです。
最近のコメント