Powershellの関数への値渡し

Powershellでスクリプトを組む必要があったので作ってみた。
配列の特定の要素の値を条件に応じて書き換えるもの。
参照渡ししたら何とかなるかと思って書いてみたら何とかならなかった。

function a([ref]$p) {
  if ($p.Value -eq 8) { $p.Value = 1 }
}

上記を定義した上で例えば

> $ar = @(1,2,3,4,5,6,7,8,9,10)
> a ([ref]$ar[7])
> $ar[7]

と実行すると「8」が出力される。配列の要素については参照渡しできないのね...。
# その辺のリテラシを持ち合わせていないのですいません。
無理して参照渡しで値を変更する必要もないので、戻り値を利用することにした。ちょっとエレガントではないが。

function b($p) {
  if ($p -eq 8) { $p = 1 }
  $p
}

同様に、

> $ar = @(1,2,3,4,5,6,7,8,9,10)
> $ar[7] = a ($ar[7])
> $ar[7]

とすると8のときだけ1に変わる(当たり前だが)。