カスタムコマンドレットで -verbose および -debug パラメータを適切に使用する方法 質問する

カスタムコマンドレットで -verbose および -debug パラメータを適切に使用する方法 質問する

デフォルトでは、[CmdletBinding()] 属性を持つ名前付き関数は、-debugand -verbose(および他のいくつかの) パラメータを受け入れ、定義済みの$debugand$verbose変数を持ちます。関数内で呼び出される他のコマンドレットにそれらを渡す方法を見つけようとしています。

次のようなコマンドレットがあるとします。

function DoStuff() {
   [CmdletBinding()]

   PROCESS {
      new-item Test -type Directory
   }
}

-debugまたは が-verbose関数に渡された場合、そのフラグをnew-itemコマンドレットに渡したいと思います。これを行うための適切なパターンは何ですか?

ベストアンサー1

$PSBoundParametersは、あなたが探しているものではありません。[CmdletBinding()]属性を使用すると、スクリプト内で を使用でき$PSCmdlet、さらに Verbose フラグも提供されます。実際に使用する必要があるのは、この同じ Verbose です。

を通じて[CmdletBinding()]、 を介してバインドされたパラメータにアクセスできます$PSCmdlet.MyInvocation.BoundParameters。以下は、CmdletBinding を使用し、関数スコープ内で使用可能な変数を調べるために、ネストされたプロンプトをすぐに入力する関数です。

PS D:\> function hi { [CmdletBinding()]param([string] $Salutation) $host.EnterNestedPrompt() }; hi -Salutation Yo -Verbose

PS D:\>>> $PSBoundParameters

____________________________________________________________________________________________________
PS D:\>>> $PSCmdlet.MyInvocation.BoundParameters

Key Value                                                                                                                                                                                                           
--- -----                                                                                                                                                                                                           
Salutation Yo                                                                                                                                                                                                              
Verbose   True                                                                                       

したがって、あなたの例では、次のようになります。

function DoStuff `
{
    [CmdletBinding()]
    param ()
    process
    {
      new-item Test -type Directory `
        -Verbose:($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent -eq $true)
    }
}

これには、-Verbose、-Verbose:$false、-Verbose:$true、およびスイッチがまったく存在しないケースが含まれます。

おすすめ記事