3

値を返すPowerShell関数からコンソールにデバッグメッセージを出力する方法はありますか?

例:

function A
{
    $output = 0

    # Start of awesome algorithm
    WriteDebug # Magic function that prints debug messages to the console
    #...
    # End of awesome algorithm

    return $output
}

# Script body
$result = A
Write-Output "Result=" $result

この説明に適合するPowerShell関数はありますか?

私はWrite-OutputとWrite-*を知っていますが、上記のような関数内でこれらの関数のいずれかを使用するすべてのテストでは、デバッグメッセージは書き込まれません。また、戻り値を使用せずに関数を呼び出すだけで、関数がデバッグメッセージを書き込むようになることも認識しています。

4

1 に答える 1

9

もちろん、Write-Debugコマンドレットを使用してください。デフォルトでは、デバッグ出力は表示されないことに注意してください。デバッグ出力を表示するには、(ではなく)に設定$DebugPreferenceします。単純な関数の場合、私は通常次のようなことをします。ContinueSilentlyContinue

function A ([switch]$Debug) {
    if ($Debug) { $DebugPreference = 'Continue' }
    Write-Debug "Debug message about something"
    # Generate output
    "Output something from function"
}

フォームの使用はお勧めしませんreturn $output。関数は、変数によってキャプチャされていないもの、ファイルにリダイレクトされていないもの(またはOut-Null)、またはにキャストされていないものをすべて出力します[void]。関数から早く戻る必要がある場合は、必ず。を使用してreturnください。

高度な機能の場合、PowerShellが次のようなユビキタスパラメーターを提供するため、デバッグ機能をもう少し簡単に取得できます-Debug

function A {
    [CmdletBinding()]
    param()

    End {
        $pscmdlet.WriteDebug("Debug message")
        "Output something from cmdlet"
    }
}

参考までに、これを高度な機能にするのはステートメントの[CmdletBinding()]属性です。param()

また、デバッグに関連しない追加情報を出力する方法が必要な場合は、忘れないでくださいWrite-Verbose$pscmdlet.WriteVerbose()

于 2012-04-15T03:20:30.013 に答える