PowerGUI脚本编辑器中的$ MyInvocation.MyCommand.Path为$ null

时间:2010-06-07 11:37:13

标签: powershell powershell-v2.0 powergui

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

是否有其他人有同样的问题或知道什么是错的?

这是我的powershell版本:

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4927
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

服务器版本:

Name                           Value
----                           -----
CLRVersion                     2.0.50727.3082
BuildVersion                   6.0.6002.18111
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

4 个答案:

答案 0 :(得分: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,但是如果你没有得到相同的输出,那么它可能是一个bug。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

此问题已得到修复。从http://powergui.org下载最新版本的PowerGUI,问题将消失。

答案 3 :(得分:0)

您可能想尝试使用Get-PSCallStack。 callstack中每个图层的InvocationInfo属性与$ myInvocation

等效

希望这有帮助。