TOP PowerShell



構文

function 関数名 {処理内容}

引数

1. $args 自動変数を使う
function f { $args.Length }
f a b c
3
function f { $args[0] * $args[1] }
f 2 3
6

2. 引数リストを書く。
function f($x, $y) {$x * $y}
f 2 3
6

3. param キーワードを使う
function f { param($x, $y); $x * $y }
f 2 3
6

引数の型指定

function f([int]$x, [int]$y) { $x * $y }
function swap([ref]$a, [ref]$b) {
$t = $a.Value;
$a.Value = $b.Value;
$b.Value = $t
}
参照渡し
System.Management.Automation.PSReference 型

名前付きパラメータ

function f($x, $y) { $x * $y }
f -x 2 -y 3
6

引数のデフォルト値

function f($x = 3, $y = 5) { $x * $y }

return/戻り値

return関数の処理を終了
値を出力するコマンドを書く関数の戻り値
値を出力するコマンドを複数並べる出力が配列になる
戻り値を変数で受けないと画面に表示される
[void]戻り値が不要な場合

パイプライン引数

$inputパイプラインから受け取った値が入る自動変数
$input は Enumerator なので
foreach 文などを使って要素を参照

begin, process, end

function 関数名
{
begin { 最初に1回呼ばれる }
process { パイプラインで受け取ったオブジェクトごとに呼ばれる }
end { 最後に1回呼ばれる }
}
パイプラインで受け取ったオブジェクトは $_ という自動変数に格納
function f()
{
begin { $local:count = 0 }
process { $_; $local:count += 1 }
end { "total {0} objects" -f $local:count }
}

1,2,3 | f
1
2
3
total 3 objects

フィルタ

process 文だけを持つ function
filter square { $_ * $_}
1,2,3 | square
1
4
9

スクリプトブロック(匿名関数)

$block = { $a * $a }
$a = 3
& $block
9
$block
$a * $a
& を付けないと、中身が表示される

管理人/副管理人のみ編集できます