fc2ブログ

(元)社内SEの徒然なる日記

powerShellで関数を使ってみた

思いつくたびに適当に書いてるもんだから、記事の内容と順序がバラバラですね。まぁ、話している内にどんどん別の話になっていく私にはお似合いかもですね。

では、本題です。PowerShellの関数は、function を使用して定義します。
# ----------------------
# 関数サンプル
# ----------------------

function releaseBackup {
・・・処理内容・・・
}


呼び出す方では、単純に関数名を指定すればOKです。
# releaseBackup関数を呼出
releaseBackup


引数がある関数の場合は、後ろにくっつけます。

powerShellの関数は空白を開けて指定します。下記は2つの引数を渡す例です。ほかの言語に慣れてると、関数名とか引数とかの間にカンマが無いのが不思議な感じしますね。
# releaseBackup関数を呼出
releaseBackup "0" "abc"


んで、引数を受け取る方(つまり関数の側)では受け取り方がいくつかあるようです。

...こんなところで凝らなくても良いと思うんですけどね。

まず、自動変数「$args」を使用する方法です。これは、関数を呼出す方が、一方的に引数を渡す事になります。

testって関数を作って動かしてみました。
PS C:\> function test { Write-Host $args[0]; Write-Host $args[1] }
PS C:\> test 'sakura' 123
sakura
123


自動変数「$args」には、与えた引数が配列として格納されます。サンプルでは、Write-Hostを使用して、コンソールに出力しています。

次に、関数本体の中で引数の受け取り方を指定する方法です。

PS C:\> function test { param($a, $b); Write-Host $a; Write-Host $b }
PS C:\> test 'hikisuu1' 987
hikisuu1
987


関数内でサンプルのようにparamを使用する事で、引数を受け取り事ができます。

関数名の直後に記述する事も出来ます。普段は、javaやvbaを使う機会が多いせいか、この方法が一番しっくりきます。
PS C:\> function test ($a, $b) { Write-Host $a; Write-Host $b }
PS C:\> test 'sora' 'yaha'
sora
yaha


通常の変数宣言と同様に、関数も型を指定できます。
PS C:\> function test ([System.String]$a, [System.Int32]$b) { Write-Host $a; Write-Host $b }
PS C:\> test 'sora' 573
sora
573


変数名の前に[ref]と付ける事で、引数の参照渡しも出来ます。
PS C:¥> function test ([ref]$a) { $a.Value = 'ttt'; Write-Host $a.Value }
PS C:¥> $b = 'abc'
PS C:¥> Write-Host $b
abc
PS C:\> test ([ref]$b)
ttt
PS C:\> Write-Host $b
ttt


最後に、関数の戻り値。

powerShellの戻り値は、出力した値がそのまま戻り値になるらしいです。例えば、下記のような関数にすると戻り値はTrueになるようです。
function test {
 $True
}


ただ、気になるのは「出力した値が全て」戻り値として返されるってことなんですよね。例えば、こんな関数を実行したらどんな戻り値になるだろうか?
function test {
 $False
 $True
}


いっその事、引数に戻り値用の項目を用意して参照渡しでやり取りした方が確実なような気が...

どうでしょうかね?

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---


スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する