$ MyInvocation.MyCommand.Path равно $ null в редакторе сценариев PowerGUI. - PullRequest
4 голосов
/ 07 июня 2010

При попытке отладки моего скрипта powershell в редакторе скриптов powerGUI (2.0.0.1082) $ 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 ]

4 голосов
/ 07 июня 2010

Объект $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, но если вы не получите такой же вывод, то это, вероятно, ошибка.

1 голос
/ 20 января 2011

Эта проблема была исправлена. Загрузите последнюю версию PowerGUI с http://powergui.org, и проблема исчезнет.

1 голос
/ 15 июня 2010

вызов вашего скрипта из другого файла скрипта: http://powergui.org/message.jspa?messageID=28988#28988

0 голосов
/ 07 июня 2010

Возможно, вы захотите попробовать использовать Get-PSCallStack. Свойство InvocationInfo каждого уровня в стеке вызовов эквивалентно $ myInvocation

Надеюсь, это поможет.

...