Объект $MyInvocation.MyCommand
изменяется в зависимости от контекста его выполнения. В этом случае $MyInvocation.MyCommand.Path
будет возвращать что-либо только при вызове из области действия $script:
, поскольку это единственная допустимая область, определяющая каталог, из которого был выполнен код.
Следовательно, решение здесь будет использовать $script:MyInvocation.MyCommand.Path
или $MyInvocation.ScriptName
.
EDIT
Выполнение этого в 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, но если вы не получите такой же вывод, то это, вероятно, ошибка.