我如何在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
包含字典?
谢谢!
使用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()
)