调试PowerShell脚本

4
我有兴趣开发一个C#应用程序来处理数据,并计划通过PowerShell将应用程序的一部分作为解释脚本公开以帮助过滤数据。我认为我已经掌握了如何实现这个想法(如何从C#执行PowerShell脚本),但是像PowerShell ISE提供的那样提供调试功能将非常有价值。是否有一种方法将ISE(或类似的调试器)附加到在C#程序中托管的PowerShell脚本上?
其中的原因之一是某些组件的灵活性受到限制, 因此需要编译的C#可执行文件, 但其中的一些需要在运行时轻松修改. 我设想一个DataTable或List<>从C#传递到PowerShell, 并从脚本返回类似的解析数据的返回值.

只是为了澄清,PowerShell中的调试与ISE无关。调试命令已经嵌入到语言中,ISE只是提供了一个GUI下拉菜单,实质上只执行这些命令。所以问题的答案是:调试器已经"附加"了。 - Cole9350
1
我之前不知道这个事实。但是我查看了一下,发现PowerShell提供了自己的调试工具,这可能是一个很好的起点。 - Justin Bell
是的,但是如果你不实现一个使用这些功能的调试器,就无法在你的C#应用程序中使用它们。 - Roman Kuzmin
2个回答

2

目前还没有办法将能够调试PowerShell的调试器附加到任意主机进程上。

您可以实现自己的调试器-必要的钩子是公开的,但这是一项非常重要的任务-您需要实现UI-您调用api设置断点,然后PowerShell会在命中断点时调用您,此时您可以决定做什么(例如等待用户说“继续”或“步进”)。


1
这在PS 5.0中有所改变。 - Χpẘ
1
是的,Enter-PSHostProcess命令,以及V5新增的Get-Runspace和Debug-Runspace命令,都可以帮助这里。 - Jason Shirk

1

@Jason Shirk正确关于调试器的问题。但是,你可以使用一些现有的调试器,而不是实现自己的调试器。例如,作为包含在NuGet软件包NuGetDebugTools中的脚本实现的简单调试器。尽管名称如此,该调试器适用于任何主机(特别是NuGet控制台没有其自己的调试器)。请注意,它的用户界面非常简约,有些类似于MS PS控制台调试器。但是它是可行的,比没有调试器更好。

我希望这个提示可以用于调试或作为实现您自己的起点。但是看起来你实际上正在寻找一个与当前PowerShell会话/运行空间相关的外部类似控制台窗口(不一定基于控制台),在其中可以探索公开的对象并更改它们。在理想的世界中,ISE可能会提供它,我认为。但目前还没有。


2
嗨Roman,你真的应该在你的回答中指明你是这个软件包的作者。http://meta.stackexchange.com/a/156186/193205 - Simon MᶜKenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接