尝试在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
答案 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
等效希望这有帮助。