4

尝试在 powerGUI 脚本编辑器 (2.0.0.1082) 中调试我的 powershell 脚本时,$MyInvocation.MyCommand.Path 为 $null。它在通过 powershell 运行脚本时起作用。在 Powershell_ise.exe(在我们的一台服务器上)中运行它也可以正常工作。

有没有其他人遇到过同样的问题或知道出了什么问题?

这是我的powershell版本:

名称 值
---- -----
CLRVersion 2.0.50727.4927
构建版本 6.1.7600.16385
PS版本 2.0
WSManStack 版本 2.0
PSCompatibleVersions {1.0, 2.0}
序列化版本 1.1.0.1
PSRemotingProtocolVersion 2.1

服务器版本:

名称 值
---- -----
CLRVersion 2.0.50727.3082
构建版本 6.0.6002.18111
PS版本 2.0
WSManStack 版本 2.0
PSCompatibleVersions {1.0, 2.0}
序列化版本 1.1.0.1
PSRemotingProtocolVersion 2.1
4

4 回答 4

4

$MyInvocation.MyCommand对象根据其执行的上下文而变化。在这种情况下,$MyInvocation.MyCommand.Path仅在从范围调用时才会返回某些$script:内容,因为这是确定执行代码的目录的唯一有效范围。

因此,这里的解决方案是使用$script:MyInvocation.MyCommand.Path$MyInvocation.ScriptName


编辑

在 PowerShell ISE 中运行它可以按预期工作,因为如果在 PowerShell 控制台中运行它会得到相同的结果:

function Main
{
    Write-Host ("MyCommand.Path from function: " + $MyInvocation.MyCommand.Path)
    Write-Host ("ScriptName from function: " + $MyInvocation.ScriptName)
}

Main

Write-Host ("MyCommand.Path from script scope: " + $MyInvocation.MyCommand.Path)
Write-Host ("ScriptName from script scope: " + $MyInvocation.ScriptName)

输出是:

MyCommand.Path from function: 
ScriptName from function: C:\temp\Test.ps1
MyCommand.Path from script scope: C:\temp\Test.ps1
ScriptName from script scope:

我没有使用过 PowerGUI,但如果你没有得到相同的输出,那么它可能是一个错误。

于 2010-06-07T15:24:33.763 回答
1

从另一个脚本文件调用您的脚本: http ://powergui.org/message.jspa?messageID=28988#28988

于 2010-06-15T09:59:39.187 回答
1

这个问题已被解决。从http://powergui.org下载最新版本的 PowerGUI,问题就会消失。

于 2011-01-20T18:52:36.143 回答
0

您可能想尝试使用 Get-PSCallStack。调用堆栈中每一层的 InvocationInfo 属性等同于 $myInvocation

希望这可以帮助。

于 2010-06-07T17:23:46.230 回答