当前位置: 首页 > 知识库问答 >
问题:

使用PowerShell,如何让写入调试输出出现在控制台中?

平元明
2023-03-14

我正在学习PowerShell,并使用Write Host检查新PowerShell脚本文件中的变量分配。然后我读到一篇文章,说这是个坏主意。

所以,在我的。ps1文件I替换了如下语句:

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

... 使用此选项:

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

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

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

但同样,输出没有写入控制台。显然我使用了错误的写入调试。如何让调试输出写入控制台?

共有2个答案

夏侯弘量
2023-03-14

如果您想要支持常见参数(包括-Debug),您需要在脚本中使用CmdletBinda属性:

[CmdletBinding()]
param()

Write-Debug Start
Write-Debug End

我建议看看about_Functions_CmdletBindingAttribute帮助文件

陆高峰
2023-03-14

tl; dr:

>

  • 运行$DebugPreference='继续'开始查看来自写入调试调用的输出。

    完成后,使用$DebugPreference='SilentlyContinue'

    要仅打开给定cmdlet或高级函数的调试输出,请使用-Debug通用参数。

    • 警告:在Windows PowerShell中(但不再在PowerShell[核心]v6中),这将为遇到的每个写入调试语句提供交互式调试提示

    是否打印写入调试语句的输出由两种机制控制:

    >

  • 范围广泛:根据$DebugPreference首选项变量的值-请参阅获取有关_preference_变量的帮助

    使用-Debug通用参数调用cmdlet或高级脚本/函数时(它覆盖$DebugPre的值)-请参阅Get-helpabout_CommonParameters

    $DebugPrecript默认为Silently继续,这解释了为什么默认情况下您看不到Sty-Debug语句的任何输出。

    使用公共参数Debug时,可以有效地仅为调用的命令设置DebugPreference,并且:

    >

    在PowerShell[Core]v6中,该值现在(更明智地)设置为继续

    • 如Mathias的回答所示,要使自定义脚本或函数支持调试公共参数,它必须是一个高级脚本或函数,并使用其param()块的[CmdletBinding()]属性声明

    由于在Windows PowerShell中,这种随时随地提示-写-调试-调用行为可能会造成破坏,$DebugPrecript='继续'可能是更好的方法。如前所述,在PowerShell[Core]v6中,这不再是一个问题。

    注意:如果从高级函数或脚本内部,您想区分$DebugPreason已被调用者设置为首选变量与通用参数-Debug已被传递(已翻译为函数/script t-local$DebugPreave变量),请使用$PSBoundParameters。ContainsKey('Debug')$true表示使用了-Debug

    参考官方文件:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-debug

    默认情况下,调试消息不会显示在控制台中,但您可以使用debug参数或$DebugPreference变量来显示它们。

  •  类似资料:
    • 问题内容: 我已尝试使用此代码建议(http://www.daniweb.com/forums/thread23883.html#)将控制台输出写入txt文件,但未成功。怎么了? 问题答案: 你需要执行以下操作: 第二句话是关键。它将假定的“最终” 属性的值更改为提供的值。 可以使用类似的方法(和)来更改标准输入和错误流。有关详细信息,请参考。 上面的一个更通用的版本是这样的: 如果为is ,则流

    • 问题内容: 我是python的新手,正在编写一些脚本来自动从FTP服务器等下载文件。我想显示下载进度,但是我希望它保持不变,例如: 输出: 正在下载文件FooFile.txt [47%] 我正在尝试避免这样的事情: 我应该怎么做呢? 复制 : 如何在命令行应用程序的当前行上打印? 问题答案: 您还可以使用回车符:

    • 问题内容: 我只有一种方法。如何检查System.out.println()并将Scanner替换为使用JUnit自动输入值? PS,请提供一些解决方案… 问题答案: 理想情况下,提取尴尬的依赖关系,以便您可以在没有依赖关系的情况下进行测试。更改为简单: (考虑使用a 代替for 。) 然后,您实际上不需要进行单元测试-但您可以使用基于的进行测试,并基于的输出进行测试,从而提供所需的任何输入并检查

    • 本文向大家介绍PowerShell 写输出,包括了PowerShell 写输出的使用技巧和注意事项,需要的朋友参考一下 示例 Write-Output产生输出。该输出可以转到管道之后的下一个命令或控制台,以便简单显示。 Cmdlet将对象沿着主管道(也称为“输出流”或“成功管道”)发送。要将错误对象发送到错误管道,请使用Write-Error。 Write-Output cmdlet将指定对象沿管

    • 我一直在尝试编码来查找给定数组元素的LCM。我的代码如下 我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。 但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!

    • 问题内容: 我正在使用Pygame / SDL的操纵杆模块从游戏手柄获取输入。每次调用它的方法时,它都会打印到控制台。这是有问题的,因为我使用控制台来帮助我进行调试,现在每秒被淹没60次。有什么方法可以禁用此功能吗?通过Pygame / SDL中的选项还是在函数调用时取消控制台输出?我在Pygame文档中没有提到这一点。 编辑: 原来是由于在编译SDL库时打开了调试功能。 问题答案: 这是来自jo