はじめに
PowerShell 2.0には200を越える便利なコマンドレットが標準搭載されています。しかし、搭載されているコマンドレットのすべてが、自分の要求をすべて満たすとは限りません。そこで、要求を満たすために、関数やコマンドレットを作成します。
PowerShell 1.0では関数を作成することができました。しかし、コマンドレットを作成するにはVB.NETやC#といった言語を使用して作成する必要があり、敷居が高いものでした。PowerShell 2.0ではスクリプトベースの「高度な関数」を作成することができるようになりました。高度な関数はコマンドレットに似た機能の関数を指します。
今回は、この「高度な関数」を作成する方法について説明します。
対象読者
- PowerShellの基本的な操作ができる方。
PowerShellについて学びたい方は、PowerShell入門の連載を参照ください。
実行環境
- PowerShell 2.0
関数をコマンドレットとして認識させる
「高度な関数」は、通常の関数を作成する場合とよく似ています。
通常の関数にCmdletBinding
属性を使用することで、自身をコマンドレットと同様に動作する関数として識別します。
高度な関数を定義する基本構文は次の通りです
01: function 関数名 02: { 03: [CmdletBinding()] 04: Param( 05: [Parameter(パラメータ属性)] 06: パラメーター 07: ) 08: Process 09: { 10: #関数本体 11: } 12: }
3行目にあるのが[CmdletBinding()]
属性です。この属性により、定義された関数は「高度な関数」として認識されるようになります。
また、パラメーターは4~7行目のParam( )
の中に記述します。関数本体は、8~11行目のProcess{ }
の中に記述します。
パラメーターとパラメーター属性
多くのコマンドレットはパラメーターを持ち備えています。高度な関数もパラメーターを持たせることが可能であり、さまざまな属性を付けることができます。
パラメーターに属性を付けるには
[Parameter(属性名=値)]
の書式で記述します。
1つのパラメーターに対して複数の属性を持たせることが可能で、その場合は
[Parameter(属性名1=値1, 属性名2=値2, 属性名n=値3)]
の書式で記述します。
また、属性名=値
で表さないものもあり、その場合は単純に
[属性名]
のようにして記述します。この書式を使った例はAlllowNull
属性の項で説明します。