从 cmdlet 返回日志输出和结果对象



cmdlet 的一般问题:处理 cmdlet 日志输出的最佳方法是什么。我读到使用Write-Host不是一个好主意,因为它不能重定向到例如文件。因此,将Write-Output用于此任务似乎是有意义的。如果我还想返回一个包含一些结果的"对象"(到管道),它将与我的 cmdlet 的日志输出混合。因为日志输出和自定义结果对象都写入同一输出流。

处理这个问题的好方法是什么?如果我想生成一些日志输出,我应该使用Write-Verbose吗?

处理 cmdlet 日志输出的最佳方法是什么

这实际上取决于脚本/cmdlet 或函数的目标。在一般意义上,您应该做的是允许大多数选项,并将其留给调用脚本/cmdlet 或函数来处理输出。 如果您支持-Verbose开关(您应该支持),Write-Verbose会很好。如果您的代码已经需要使用标准输出流,则需要至少使用一个不同的输出流来获取其他信息。详细似乎很合适,但这实际上取决于信息所代表的内容。

我读过使用Write-Host不是一个好主意,因为它不能重定向到例如文件。

v5 不再如此。Write-Host为此名声不佳,但主要是因为人们滥用了它。Ansgar Wiechers在PowerShell 5中对Write-Host vs Write-Information的回答很好地概述了不同的流。Write-Information将是一个显而易见的选择,您可以根据需要重定向。这是在PowerShell v5中引入的,因此您可能会遇到需要考虑的可移植性问题。

只要你拥有 PowerShell v3 或更高版本,就可以根据需要将详细输出重定向到文件,同时保留标准输出流。

# Location for verbose output
$filename = "c:tempverbose.txt"
# Genereate standard, verbose and error output.
$result = $("Bagel";Write-Verbose "Verbose Output"; Write-Error "Error Output") 4> $filename
# Pipeline output will be in $var
$result
# Warning output is in the file
Get-Content $filename

处理这个问题的好方法是什么?

重复:使用各种流在代码中放置尽可能多的必要输出,并允许调用方选择性地启用它,这也允许他们根据具体情况重定向或抑制。

相关内容

  • 没有找到相关文章

最新更新