2012-04-15 9 views
1

値を返すPowerShell関数からデバッグメッセージをコンソールに出力する方法はありますか?返す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- *を認識していますが、上記のような関数内のこれらの関数を使用しているすべてのテストでは、デバッグメッセージは書き込まれません。また、返された値を使わずに関数を呼び出すだけで、実際に関数がデバッグメッセージを書き込むことに気付いています。

答えて

6

確かに、Write-Debugコマンドレットを使用してください。デフォルトでは、デバッグ出力は表示されません。デバッグ出力を表示するには、$DebugPreferenceを(SilentlyContinueではなく)に設定します。

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を使用してください。 、-Debug含むPowerShellはあなたのためのユビキタスなパラメータを提供するため、あなたはもう少し簡単にデバッグ機能を得ることができる高度な機能については

:FYI

function A { 
    [CmdletBinding()] 
    param() 

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

、それはparam()ステートメントの[CmdletBinding()]属性は、このANを作るものですよ高度な機能。

また、デバッグ関連ではない追加情報を出力したい場合は、Write-Verbose$pscmdlet.WriteVerbose()を忘れないようにしてください。

+2

write-hostも同様に機能します。 – x0n

+3

@ x0nホストへのメッセージをあまり制御しないという点を除いて、そうです。ログファイルをシャットダウンしたり、ログファイルにリダイレクトする必要はありません。 :-) –

+0

私は今参照してください。ありがとう。 –