我如何在PowerShell cmdlet中打印出调试消息,而不是WriteObject作为返回值

本文关键字:WriteObject 返回值 消息 调试 PowerShell cmdlet 打印 | 更新日期: 2023-09-27 18:02:57

我尝试用c#构建一个PowerShell cmdlet。在一个函数中,我想打印一行日志并返回一个对象。如果我在两个地方都使用WriteObject(),我可以在PowerShell窗口中看到它们。但是如果我使用一个变量来获取输出,我的cmdlet,它会同时获得字符串和对象。我怎么能让变量只得到我要返回的对象呢?

public override void ExecuteCmdlet()
{
    Dictionary<string, string> returnValue = new Dictionary<string, string>();
    WriteObject("Debug Log"); // Print log
    // ... do something ...
    WriteObject(returnValue); // Return value
}

假设我的cmdlet名为foo。在PowerShell窗口中,如果我运行

$ret = foo
$ret.Count

输出为2。

$ret

输出包含调试消息和字典。有没有办法让$ret包含字典?

谢谢!

我如何在PowerShell cmdlet中打印出调试消息,而不是WriteObject作为返回值

使用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())