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

2024-03-11

我正在学习 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(使用前将#替换为@)

使用 PowerShell,如何让 Write-Debug 输出显示在控制台中? 的相关文章

随机推荐