使用PowerShell,如何让Write-Debug输出出现在控制台中?

时间:2017-07-24 20:43:22

标签: powershell

我正在学习PowerShell,并且正在使用Write-Host来检查新PowerShell脚本文件中的变量赋值。然后我读了这篇文章: http://windowsitpro.com/blog/what-do-not-do-powershell-part-1

所以,在我的.ps1文件中,我替换了这样的语句:

Write-Host "Start"
Write-Host "End"

......用这个:

Write-Debug "Start"
Write-Debug "End"

但是当我在Windows PowerShell ISE中运行已保存的脚本时,没有输出写入控制台。我将-debug附加到调用脚本的语句中,如下所示:

PS E:\trialrun> .\MyScript.ps1 -debug

但同样,输出也没有写入控制台。显然我错误地使用了Write-Debug。如何将调试输出写入控制台?感谢。

3 个答案:

答案 0 :(得分:16)

<强> TL;博士

  • 运行$DebugPreference = 'Continue'以开始查看Write-Debug来电的输出。

  • 完成后,使用$DebugPreference

  • 将偏好变量$DebugPreference = 'SilentlyContinue'恢复为默认值

是否打印Write-Debug语句的输出由两种机制控制:

$DebugPreference默认为SilentlyContinue,这解释了默认情况下您没有看到Write-Debug语句的任何输出的原因。

当您使用公共参数-Debug 时,基本上只为调用的命令设置$DebugPreference ,而 总是将其设置为值Inquire 不仅打印 Write-Debug消息,还暂停在每个这样的陈述中询问你想如何继续

  • 对于支持-Debug公共参数的自定义脚本或函数,必须使用[CmdletBinding()]块的param()属性声明它,如Mathias' answer所示。

由于此即时提示 - Write-Debug - 通话行为可能是中断$DebugPreference = 'Continue'可能是更好的方法。

答案 1 :(得分:11)

如果您希望支持常见参数(包括CmdletBinding),则您的脚本中需要-Debug属性:

[CmdletBinding()]
param()

Write-Debug Start
Write-Debug End

我建议您查看about_Functions_CmdletBindingAttribute帮助文件

答案 2 :(得分:0)

我使用File1 File2 File3 代替write-output,然后将其打印到控制台。 write-host是另一种选择。

有关详情http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/

,请参阅此文章 编辑:我被告知我的方法很糟糕。请参阅以下评论,了解原因。