PowerShell で CmdletBinding 属性を使用する
-
PowerShell の
CmdletBinding
属性 -
Verbose
パラメータでCmdletBinding
属性を使用する -
$PSCmdlet
オブジェクトとSupportsShouldProcess
でCmdletBinding
属性を使用する -
CmdletBinding
属性をParameter
属性とともに使用して、関数パラメーターを制御する
cmdlet
は、PowerShell 環境内で単一の機能を実行する軽量のスクリプトです。cmdlet
は、任意の .Net
言語で記述できます。
通常、cmdlet
は、コマンドを実行するための動詞と名詞のペアとして表されます。このコマンドは、基盤となるオペレーティングシステムに対して、エンドユーザーが特定のサービスを実行するための命令です。
PowerShell 環境には、New-Item
、Move-Item
、Set-Location
、Get-Location
などの 200 を超える基本的な cmdlet
が含まれています。cmdlet
は、単純な PowerShell 関数では使用できない共通の機能セットを共有します。
-WhatIf
、ErrorAction
、Verbose
などの一般的なパラメータをサポートします。- 確認のためのプロンプト
- 必須のパラメーターのサポート
PowerShell の CmdletBinding
属性
単純な PowerShell 関数は、上記の基本的な cmdlet
機能を継承することにより、高度な関数として記述できます。CmdletBinding
属性を使用すると、これらの基本的な cmdlet
機能にアクセスできます。
以下に、すべての可能な引数を含む CmdletBinding
属性構文を示します。
{
[CmdletBinding(ConfirmImpact=<String>,
DefaultParameterSetName=<String>,
HelpURI=<URI>,
SupportsPaging=<Boolean>,
SupportsShouldProcess=<Boolean>,
PositionalBinding=<Boolean>)]
Param ($myparam)
Begin{}
Process{}
End{}
}
Helloworld-To-UpperCase
と呼ばれる単純な PowerShell 関数があるとしましょう。
Function Helloworld-To-UpperCase {
"helloworld".ToUpper();
}
この関数に関連付けられているパラメーターはありません。したがって、これは単純な PowerShell 関数と呼ばれます。
ただし、次のように、CmdletBinding
属性を使用してこの関数を高度な関数に変換し、基本的な cmdlet
機能とパラメーターにアクセスできます。
Function Helloworld-To-UpperCase {
[CmdletBinding()]Param()
"helloworld".ToUpper();
}
Helloworld-To-UpperCase
関数は、すべての基本的な cmdlet
機能を継承する高度な関数に変換されました。この関数では、基本的な cmdlet
パラメーターを使用できます。
PowerShell ウィンドウで -
を使用してこの関数を呼び出すと、cmdlet
からのすべての一般的なパラメーターが一覧表示されます。
helloworld-to-uppercase -
出力:
共通の cmdlet
パラメータと機能を高度な機能内で使用して、機能を拡張できます。
Verbose
パラメータで CmdletBinding
属性を使用する
-verbose
は、高度な機能の実行時にメッセージを表示できる貴重な共通パラメーターの 1つです。
Function Helloworld-To-UpperCase {
[CmdletBinding()]Param()
Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"
"helloworld".ToUpper();
}
-verbose
パラメータを使用して上記の関数を呼び出すと、すべての Write-Verbose
文字列が PowerShell ウィンドウに出力されます。
HelloWorld-To-UpperCase -Verbose
出力:
$PSCmdlet
オブジェクトと SupportsShouldProcess
で CmdletBinding
属性を使用する
CmdletBinding
属性を使用したので、高度な関数は手間をかけずに $PSCmdlet
オブジェクトにアクセスできます。このオブジェクトには、ShouldContinue
、ShouldProcess
、ToString
、WriteDebug
などのいくつかのメソッドが含まれています。
ShouldContinue
メソッドで CmdletBinding
属性を使用する
この方法により、ユーザーは確認要求を処理できます。それまでの間、SupportsShouldProcess
引数を $True
に設定する必要があります。
ShouldContinue
メソッドにはいくつかのオーバーロードされたメソッドがあり、2つのパラメーターを持つメソッドを使用します。
Function Helloworld-To-UpperCase {
[CmdletBinding(SupportsShouldProcess=$True)]Param()
Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"
if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
"helloworld".ToUpper();
} Else {
"helloworld kept in lowercase."
}
}
-Confirm
パラメータを使用して関数を呼び出すと、次のような確認ボックスが表示されます。
HelloWorld-To-UpperCase -Confirm
出力:
ユーザーがはい
をクリックした場合、if
ブロックにメソッドを実装し、helloworld
文字列を大文字で出力する必要があります。
そうでない場合は、helloworld は小文字で保持されます
というメッセージが表示されます。
CmdletBinding
属性を Parameter
属性とともに使用して、関数パラメーターを制御する
高度な関数に 1つのパラメーターを文字列として受け取らせるようにしましょう。
Function Helloworld-To-UpperCase {
[CmdletBinding(SupportsShouldProcess=$True)]
Param([string]$word)
Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"
if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
$word.ToUpper();
} Else {
"helloworld kept in lowercase."
}
}
Helloworld-To-UpperCase
関数を変更して、$word
と呼ばれる 1つの文字列タイプのパラメーターを取得します。関数が呼び出されたら、引数として文字列を指定する必要があります。
提供されたテキストは大文字に変換されます。ユーザーがテキスト引数を指定していない場合、関数は空の出力を返します。
これを制御するには、$word
パラメーターを必須にし、パラメーターの位置を 0
にします。
Function Helloworld-To-UpperCase {
[CmdletBinding(SupportsShouldProcess=$True)]
Param(
[Parameter(
Mandatory=$True, Position=0
) ]
[string]$word
)
#Verbose
Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"
#If/Else block for request processing
if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
$word.ToUpper();
} Else {
"helloworld kept in lowercase."
}
}
$word
パラメータの動作を制御するためにいくつかのフラグを追加しました。必須なので、関数の実行時に文字列値を指定する必要があります。
HelloWorld-To-UpperCase -Confirm "stringtouppercase"
テキスト引数を指定しない場合、PowerShell はそれを要求し続けます。
次の Parameter
属性構文に示すように、いくつかのフラグを使用して関数のパラメーターを制御できます。
Param
(
[Parameter(
Mandatory=<Boolean>,
Position=<Integer>,
ParameterSetName=<String>,
ValueFromPipeline=<Boolean>,
ValueFromPipelineByPropertyName=<Boolean>,
ValueFromRemainingArguments=<Boolean>,
HelpMessage=<String>,
)]
[string[]]
$Parameter1
)
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.