PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本

Posted

技术标签:

【中文标题】PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本【英文标题】:PowerShell ISE: Debug another power-shell script called from a power-shell script 【发布时间】:2017-01-01 13:22:14 【问题描述】:

我想调试一个 power-shell 脚本,该脚本是使用 PowerShell ISE 从我的主 power-shell 脚本调用的。下面是我的 Main 脚本的示例代码。

$myLog = "$scriptPath\BuildRelease\logs\LaLogs.log"

$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Set-Location -Path $scriptPath
Set-Location -Path BuildRelease
$paramList = "-ArgumentList -username $Login"

if($Mode -eq "False")
    Start-Process powershell -ArgumentList '-noexit','-File', 'Release.ps1', $paramList

在这里,我正在尝试使用 ISE 进入 Release.ps1 脚本。

我曾尝试通过按F11 键来执行此操作,但不是调试器转到此脚本,而是执行脚本(与 Step Over 相同,而不是 Step into)。

有谁知道我该怎么做??

【问题讨论】:

effin 递归... ;( 开个玩笑,“Start-Process powershell”背后的逻辑是什么? 我正在另一个实例上执行 Release.ps1 脚本,这就是我使用 Start-Process powershell 的原因。这是客户希望我这样做的事情。 调试如何?如果您按照 Nico 的建议知道导致它失败的条件,则可以手动运行它。如果您想在实时环境中对其进行测试,您需要设置适当的错误捕获,将错误记录到文件中或在弹出窗口或其他内容中显示它们。如果您知道错误但需要查看变量,那就是另一回事了。我们需要知道你想做什么。 【参考方案1】:

通过使用Start-Process,您可以运行一个新的 powershell 实例。所以这就是为什么你不能调试你的脚本。 您可以使用以下方法调用脚本中的其他脚本:

.\Release.ps1 -username $Login

有了这个,你就可以调试你的脚本了

【讨论】:

有没有办法只用这种方式调试它(在另一个实例中执行脚本)? 我不这么认为,您可以尝试使用参数:NoNewWindow,但认为它不起作用。否则,如果您必须在没有 ./ 的情况下调试脚本,您可以使用:New-PsBreakpoint ... 为第二个脚本手动添加断点。一些有用的链接:PowerShell Debugger 或 Quick and Efficient PowerShell Script Debugging。我从不使用这种调试方式 谢谢 Nico ,这真的帮助我按照我的要求调试它。

以上是关于PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell ISE/文件名解析缺陷远程执行代码漏洞#RCE

如何将所需的参数传递给 Powershell ISE 中的脚本?

从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1

PowerShell 和 TFS |使用本地路径与使用服务器路径的 PowerShell ISE 从 TFS 获取更改集列表

从 Powershell ISE 和 Windows 资源管理器运行脚本的不同行为

Powershell ISE 崩溃时在哪里存储选项卡?