about_Functions_CmdletBindingAttribute
関数をコンパイル済みコマンドレットのように機能させる属性について説明します。
CmdletBinding
属性は、C# で記述されたコンパイル済みコマンドレットのように動作させる関数の属性です。 コマンドレットの機能へのアクセスを提供します。
CmdletBinding
属性を使用すると、PowerShell によって共通パラメーターが自動的に追加されます。 共通パラメーターと同じ名前を使用するパラメーターは作成できません。 詳細については、「about_CommonParameters」を参照してください。
PowerShell は、コンパイルされたコマンドレットのパラメーターをバインドするのと同じ方法で、 CmdletBinding
属性を持つ関数のパラメーターをバインドします。
$PSCmdlet
自動変数は、CmdletBinding
属性を持つ関数で使用できますが、$Args
変数は使用できません。
CmdletBinding
属性を持つ関数では、不明なパラメーターと位置指定パラメーターが一致しない位置引数により、パラメーター バインドが失敗します。
注意
コンパイルされたコマンドレットでは、必要な Cmdlet
属性が使用されます。これは、このトピックで説明する CmdletBinding
属性に似ています。
次の例は、 CmdletBinding
属性のすべての省略可能な引数を指定する関数の形式を示しています。 各引数の簡単な説明は、この例に従います。
{
[CmdletBinding(ConfirmImpact=<String>,
DefaultParameterSetName=<String>,
HelpURI=<URI>,
SupportsPaging=<Boolean>,
SupportsShouldProcess=<Boolean>,
PositionalBinding=<Boolean>)]
Param ($Parameter1)
Begin{}
Process{}
End{}
}
CmdletBinding 属性のブール型は、CmdletBinding 属性から省略すると既定で False になります。 引数の値を $true
に設定するか、単に名前で引数を一覧表示します。 たとえば、次の CmdletBinding 属性は同等です。
{
[CmdletBinding(SupportsPaging=$true)]
Param ($Parameter1)
Begin{}
Process{}
End{}
}
# Boolean arguments can be defined using this shorthand syntax
{
[CmdletBinding(SupportsPaging)]
Param ($Parameter1)
Begin{}
Process{}
End{}
}
ConfirmImpact 引数は、ShouldProcess メソッドの呼び出しによって関数のアクションを確認するタイミングを指定します。
ShouldProcess メソッドを呼び出すと、ConfirmImpact引数が$ConfirmPreference
設定変数の値以上の場合にのみ、確認プロンプトが表示されます。 (引数の既定値は 中.)この引数は、 SupportsShouldProcess 引数も指定されている場合にのみ指定します。
確認要求の詳細については、「 要求の確認」を参照してください。
引数 DefaultParameterSetName は、使用するパラメーター セットを判断できない場合に PowerShell が使用するパラメーター セットの名前を指定します。 各パラメーターの一意のパラメーターを必須パラメーターに設定することで、この問題を回避できます。
HelpURI 引数は、関数を説明するオンライン バージョンのヘルプ トピックのインターネット アドレスを指定します。 HelpURI 引数の値は、"http" または "https" で始まる必要があります。
HelpURI 引数の値は、CommandInfo 関数に対して返されるCommandInfo オブジェクトの値に使用Get-Command
。
ただし、ヘルプ ファイルがコンピューターにインストールされ、ヘルプ ファイルの RelatedLinks セクションの最初のリンクの値が URI であるか、コメント ベースのヘルプの最初の .Link
ディレクティブの値が URI である場合、ヘルプ ファイル内の URI が関数の HelpUri プロパティの値として使用されます。
Get-Help
コマンドレットは、HelpURI プロパティの値を使用して、の Get-Help
パラメーターが指定されている場合に、関数ヘルプ トピックのオンライン バージョンを検索します。
SupportsPaging 引数は、First、Skip、および IncludeTotalCount パラメーターを関数に追加します。 これらのパラメーターを使用すると、ユーザーは非常に大きな結果セットから出力を選択できます。 この引数は、SQL データベースなどのデータ選択をサポートする大規模なデータ ストアからデータを返すコマンドレットと関数用に設計されています。
この引数は、Windows PowerShell 3.0 で導入されました。
- First: 最初の 'n' オブジェクトのみを取得します。
- スキップ: 最初の 'n' オブジェクトを無視し、残りのオブジェクトを取得します。
- IncludeTotalCount: データ セット内のオブジェクトの数 (整数) とそれに続くオブジェクトを報告します。 コマンドレットが合計カウントを特定できない場合は、"不明な合計カウント" を返します。
PowerShell には NewTotalCount、返される合計カウント値を取得し、合計カウント値の精度の見積もりを含むヘルパー メソッドが含まれています。
次のサンプル関数は、ページング パラメーターのサポートを高度な関数に追加する方法を示しています。
function Get-Numbers {
[CmdletBinding(SupportsPaging)]
param()
$FirstNumber = [Math]::Min($PSCmdlet.PagingParameters.Skip, 100)
$LastNumber = [Math]::Min($PSCmdlet.PagingParameters.First +
$FirstNumber - 1, 100)
if ($PSCmdlet.PagingParameters.IncludeTotalCount) {
$TotalCountAccuracy = 1.0
$TotalCount = $PSCmdlet.PagingParameters.NewTotalCount(100,
$TotalCountAccuracy)
Write-Output $TotalCount
}
$FirstNumber .. $LastNumber | Write-Output
}
SupportsShouldProcess引数は、関数に Confirm パラメーターと WhatIf パラメーターを追加します。 Confirm パラメーターは、パイプライン内の各オブジェクトでコマンドを実行する前に、ユーザーにプロンプトを表示します。 WhatIf パラメーターは、コマンドを実行するのではなく、コマンドが行う変更を一覧表示します。
PositionalBinding 引数は、関数内のパラメーターが既定で位置指定されているかどうかを決定します。 既定値は $True
です。
PositionalBinding 引数の値を $False
と共に使用すると、位置バインディングを無効にすることができます。
PositionalBinding 引数は、Windows PowerShell 3.0 で導入されています。
パラメーターが位置指定の場合、パラメーター名は省略可能です。 PowerShell は、関数コマンドの名前のないパラメーター値の順序または位置に従って、名前のないパラメーター値を関数パラメーターに関連付けます。
パラメーターが位置指定されていない場合 ("名前付き") は、コマンドにパラメーター名 (または名前の省略形または別名) が必要です。
PositionalBinding が$True
されている場合、関数パラメーターは既定で位置指定されます。 PowerShell は、関数で宣言されている順序でパラメーターに位置番号を割り当てます。
PositionalBinding が$False
の場合、関数パラメーターは既定では位置指定されません。 パラメーターで Parameter 属性の Position 引数を宣言しない限り、パラメーター名 (またはエイリアスまたは省略形) を関数で使用する場合は、パラメーター名を含む必要があります。
Parameter 属性の Position 引数は、既定値の PositionalBinding よりも優先されます。 引数 Position を使用して、パラメーターの位置値を指定できます。 引数 Position の詳細については、「 about_Functions_Advanced_Parameters」を参照してください。
SupportsTransactions 引数は、高度な関数ではサポートされていません。
about_Functions_CmdletBinding_Attribute
PowerShell に関するフィードバック
PowerShell はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。