我正在学习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。如何将调试输出写入控制台?感谢。
答案 0 :(得分:16)
<强> TL;博士强>:
运行$DebugPreference = 'Continue'
以开始查看Write-Debug
来电的输出。
完成后,使用$DebugPreference
$DebugPreference = 'SilentlyContinue'
恢复为默认值
是否打印Write-Debug
语句的输出由两种机制控制:
范围范围:根据 $DebugPreference
偏好变量的值 - 请参阅Get-Help about_Preference_Variables
。
Ad-hoc,命令范围,在调用cmdlet或高级脚本/函数(覆盖$DebugPreference
值)时使用 -Debug
常见参数 - 请参阅Get-Help about_CommonParameters
。
$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/
,请参阅此文章 编辑:我被告知我的方法很糟糕。请参阅以下评论,了解原因。