関数はPowerShellでよく発生するものであり、PowerShell言語を真に理解するには、関数の動作を知っていることが重要です。 この記事では、PowerShell関数が基本的に何もないものから検証属性を使用したパラメータまでどのように進化するかを示します。
これを実証するために、まず簡単には得られない関数から始めましょう。PowerShellセッション内で実行すると、この関数は実行されますが、実行するコードがないため何もしません。 PowerShellは単に関数自体を実行して返します。
関数が実際に何かをするためには、いくつかのコードを追加する必要があります。 コードは、paramブロックと最後の中括弧の間に追加されます。 以下に、Write-Log関数が文字列”I did something”をコンソールに返すようにしていることがわかります。私たちの関数はWrite-Logと呼ばれているので、これは最終的に何らかのテキストをログファイルに書き込む関数になると仮定しています。 毎回同じことをログファイルに書きたくないので、関数の実行時にメッセージを変更する方法を提供する必要があります。 これを行うには、パラメータを追加します。 パラメーターを使用すると、ユーザーは実行時に関数に異なる値を渡すことができます。 これにより、関数は実行時に動的入力を収集することができます。
パラメータを追加するには、変数を追加します。 この場合、変数はMessageと呼ばれます。 以下に示すように、paramブロック内に追加します。 その後、関数自体の中でそのパラメータを参照できることがわかります。 実行すると、関数はMessageパラメータに渡した値を返します。p>
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
一つのパラメータだけで停止する必要はありません。 私たちはここで好きなだけ追加することができます。 以下では、Severityパラメータを追加し、関数が実行されたときに値を提供していますが、同じ動作を示すことがわかります。
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
パラメータの処理方法がわかったので、パラメータタイプに入ることができます。 パラメーターには、PowerShellの他のものと同様の型があります。 上記では、型を使用していましたが、想像できるあらゆる種類のオブジェクトを受け入れました。 パラメーターが明示的に入力されていません。 期待する値だけが渡されるようにするには、すべてのパラメータでこれを行うことをお勧めします。
型を定義するには、パラメータが宣言される直前に角括弧で型を追加することができます。明示的な型がパラメータに割り当てられると、PowerShellはその型の入力または変換可能なオブジェクトのみを受け入れます。 以下のこの例では、ブール値$falseをMessageパラメータに渡しています。 PowerShellでは許可されないことがわかります。 これは、boolean型をServiceController型に変換できないためです。ただし、Get-Serviceが返すServiceControllerオブジェクトを渡すと、正常に動作します。
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
パラメータ属性を使用することもできます。 パラメータの属性は、私たちはそれがどのように動作するかを決定する各パラメータの異なる特性を定義することができます。 以下の例では、Mandatoryパラメータを使用しています。 これらの属性は、ユーザーにメッセージパラメータに値を渡すように強制します。また、Severityパラメータにデフォルト値を設定しています。
これにより、実行時にそのパラメータに値を渡すことによってオーバーライドされない限り、重大度を常に1にすることができます。
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
最後に、パラメータ検証属性を使用することができます。 パラメータ検証属性は、パラメータに渡される値を制限するための優れた方法です。 以下の例では、ValidateRange()検証属性を使用しています。 この属性は、integer型のパラメーターで使用され、許可される数値の範囲を定義します。 この例では、Severityの値を1-5にするだけです。 その範囲にない他の値は失敗します。P>
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
ラップアップ
これで、PowerShellで関数がどのように機能するかの基本的な理解が得られるはずです。 PowerShellで便利な関数の構築を開始するために知っておく必要があるすべてをカバーしました。 私はあなたが関数が有用であろうあなたのスクリプトの時間に気づき始め、それらをbuiding始めることをお勧めします。 時間が経つにつれて、コードがよりきれいになり、読みやすくなることがわかります。