我正在学习 PowerShell 并正在使用写主机 https://learn.microsoft.com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Write-Host检查新 PowerShell 脚本文件中的变量分配。然后我读到一篇文章表明这是一个坏主意。
因此,在我的 .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。如何将调试输出写入控制台?
tl;dr:
-
Run $DebugPreference = 'Continue'
开始查看输出Write-Debug
calls.
-
完成后,恢复首选项变量$DebugPreference
为其默认值,使用$DebugPreference = 'SilentlyContinue'
-
要仅打开给定 cmdlet 或高级函数的调试输出,请使用-Debug
公共参数。
-
Caveat: In Windows PowerShell(但不再在 PowerShell [Core] v6+ 中,这将为每个
Write-Debug
遇到的语句。
是否输出自Write-Debug
打印语句由两种机制控制:
-
范围广泛: 根据值$DebugPreference
偏好变量 - see Get-Help about_Preference_Variables https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_preference_variables.
-
临时的、命令范围的,当调用 cmdlet 或advanced脚本/函数(覆盖$DebugPreference
值)与-Debug
通用参数 - see Get-Help about_CommonParameters https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_commonparameters.
$DebugPreference
默认为SilentlyContinue
,这解释了为什么您看不到任何输出Write-Debug
默认情况下的语句。
当你使用通用参数-Debug
,你有效地设置了$DebugPreference
仅适用于调用的命令, and:
-
in Windows PowerShell, you 总是将其设置为值Inquire
, which 不仅prints Write-Debug
消息,还pauses在每次这样的陈述时询问你想如何进行.
-
in PowerShell [核心] v6+,该值现在(更明智地)设置为Continue
.
- 对于支持的自定义脚本或函数
-Debug
公共参数,它必须是一个advanced https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced一、声明与[CmdletBinding()]
其属性为param()
块,如马蒂亚斯的回答 https://stackoverflow.com/a/45289842/45375 shows.
自从,在Windows PowerShell,这个提示在每个 -Write-Debug
- 呼叫行为可以是破坏性的, $DebugPreference = 'Continue'
可能是更好的方法。如前所述,在 PowerShell [Core] v6+ 中,这不再是一个问题。
注意:如果您想从高级函数或脚本内部区分$DebugPreference
已被设置为偏好变量由呼叫者 vs. 呼叫者通用参数 -Debug
已被传递(被转换为函数/脚本本地$DebugPreference
变量),使用$PSBoundParameters.ContainsKey('Debug')
; $true
表明-Debug
被使用了。
参考官方文档:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug
默认情况下,调试消息不会显示在控制台中,但是您可以
可以使用 Debug 参数或 $DebugPreference 显示它们
多变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)