2010-06-07 2 views
4

powerGUI 스크립트 편집기 (2.0.0.1082)에서 my powershell 스크립트를 디버깅하려고하면 $ MyInvocation.MyCommand.Path가 $ null입니다. PowerShell을 통해 스크립트를 실행할 때 작동합니다. Powershell_ise.exe (우리 서버 중 하나에서)를 실행하면 정상적으로 작동합니다.

다른 누구에게도 동일한 문제가 있거나 잘못된 것이 있습니까?

 
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 

Server 버전 : 그 실행의 상황에 따라

 
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

FYI : 함수에서 호출 할 때 null이 될 것이라고 읽었습니다. 나는 그렇게하지 않았다. – Polymorphix

답변

1

이 문제가 수정되었습니다. http://powergui.org에서 PowerGUI의 최신 버전을 다운로드하면 문제가 사라집니다.

+0

다음 주셔서 감사합니다. :) – Polymorphix

+3

최신 버전 (3.5.0.2293)을 실행 중이며 여전히이 문제가있는 것 같습니다. –

4

$MyInvocation.MyCommand 개체 변경

여기 내 파워 쉘 버전입니다. 이 경우 $MyInvocation.MyCommand.Path$script: 범위에서 호출 한 경우에만 코드를 실행 한 디렉터리를 결정할 수있는 유일한 유효한 범위이기 때문에 무언가를 반환합니다.

따라서 여기 해결책은 $script:MyInvocation.MyCommand.Path 또는 $MyInvocation.ScriptName을 사용하는 것입니다.

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) 

출력은 다음과 같습니다 : 당신이 PowerShell 콘솔에서 실행하면 동일한 결과를 얻을로 PowerShell을 ISE이 실행


편집

는 기대 작품으로

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를 사용하지 않았지만 동일한 출력을 얻지 못하면 아마 버그 일 것입니다.

+0

그들 중 아무도 나에게 $ null을주지 않습니다. 그리고 $ MyInvocation.MyCommand.Path는 함수 밖의 스크립트의 첫 번째 줄에서 호출되기 때문에 필자의 제한된 PowerShell 지식은 $ 스크립트 범위에 이미 있음을 나타냅니다. 나는 실제로 ScriptEditor의 버그라고 생각합니다. 프롬프트에서 실행할 때 잘 동작합니다. – Polymorphix

+0

죄송합니다, 제 답변을 좀 더 명확히했습니다. 내 편집을 참조하십시오. –

+1

ISE에서 작동하지 않습니다. 나는 항상 null이된다. – pabrams

0

Get-PSCallStack을 사용해 볼 수 있습니다. 호출 스택의 각 계층의 InvocationInfo 속성은 $ myInocation에 대한 동등한 것입니다.

희망이 도움이됩니다.

+0

감사합니다. 유용한 도구처럼 들립니다. ScriptEditor 디버거에서 스크립트를 실행할 때 Get-PSCallStack의 명령은 '.'이지만 프롬프트에서 스크립트를 실행할 때 스크립트의 이름입니다. – Polymorphix

관련 문제