2016-08-18 8 views
0

C#でPowerShellコマンドレットを作成しようとしています。ある関数では、1行のログを出力してオブジェクトを返す必要があります。両方の場所でWriteObject()を使用している場合は、PowerShellウィンドウでそれらを見ることができます。しかし、変数を使用して出力を自分のコマンドレットにすると、文字列とオブジェクトの両方が取得されます。どのようにして、変数に返すオブジェクトだけを取得させることができますか?PowerShellコマンドレットでデバッグメッセージを出力できますが、戻り値としてWriteObjectは出力できませんでしたか?

public override void ExecuteCmdlet() 
{ 
    Dictionary<string, string> returnValue = new Dictionary<string, string>(); 
    WriteObject("Debug Log"); // Print log 

    // ... do something ... 

    WriteObject(returnValue); // Return value 
} 

fooという名前の私のコマンドレットを想定します。私は

$ret = foo 
$ret.Count 

を実行する場合、出力は2

$ret 

あるPowerShellウィンドウでは、出力は、デバッグメッセージと辞書の両方が含まれています。 $retには辞書が含まれていますか?

ありがとうございます!

答えて

2

使用WriteDebug()Debugストリームに書き込む:

public override void ExecuteCmdlet() 
{ 
    Dictionary<string, string> returnValue = new Dictionary<string, string>(); 
    WriteDebug("Debug Log"); // Print log 

    // ... do something ... 

    WriteObject(returnValue); // Return value 
} 

PS C:\> @(foo).Count 
1 
PS C:\> $DebugPreference = 'Continue' # show debug output, but don't halt exection 
PS C:\> @(foo).Count 
Debug Log 
1 
PS C:\> $ret = foo 
Debug Log 
PS C:\> $ret.Count 
1 

注:目的は受動的にであれば、あなたはまた、Verboseストリーム(WriteVerbose())に書くことができます必ず実行を中断することなく診断出力を提供する

+0

コマンドレットを使用する場合、WriteDebugおよびWriteVerboseには追加のパラメータが必要です。とにかく、-Verboseや-Debugなしで出力を得るには? – NonStatic

+0

出力を汚染しないでください。何かエラーがありますか? Cmdlet.WriteDebugとCmdlet.WriteVerboseは、メッセージテキスト以上のものは必要ありませんか? –

+0

デバッグ出力をオンにしない場合、または-Debugを指定しない場合、エラーは出力されません。私は、ユーザにさらなるステップとパラメータを必要とせずに、出力オブジェクトに含まれていないメッセージを得るようにしたいと思います。 – NonStatic

関連する問題