programing

$My Invocation.나의 사령부.경로 반환 NULL

muds 2023. 10. 3. 11:37
반응형

$My Invocation.나의 사령부.경로 반환 NULL

더 긴 스크립트의 시작으로 다음 코드가 있습니다.

$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
& $ScriptPath\build_functions.ps1
& $ScriptPath\build_builddefs.ps1

이 아이디어는 실행 중인 스크립트의 경로를 가져와 이 경로를 사용하여 지원 스크립트를 호출하는 것입니다.그러나 블록을 강조 표시하고 해당 코드만 실행하여 작동하는지 확인하기 위해 이 코드를 분리하여 테스트하려고 하면 다음과 같은 오류가 발생했습니다.

Split-Path: Cannot bind argument to parameter 'Path' because it is null.

흥미롭게도 전체 스크립트를 실행하면 이 파일들이 따로 실행되는 것 같습니다.ISE가 전체 스크립트가 아닌 선택 항목 실행을 처리하는 방식에 대해 누락된 점이 있습니까?선택 항목을 실행할 때 파일 시스템 컨텍스트를 설정하지 않습니까?

$MyInvocation스크립트 실행 시간에 채워지는 자동 변수입니다. 실행할 경우$MyInvocation.MyCommand.Path일순간에powershell console아니면ISE인구가 없는 상태입니다.

그래서 당신의 시험에서$ScriptPath값이 없습니다($null)

내게 일어난 일이 왜 $My Invocation에서 무효를 구했는지는 모르겠지만요.나의 사령부.길, 하지만 제가 어떻게 해결책을 찾았는지 설명하겠습니다.

프로덕션에서 작동하는 스크립트가 있었는데 .ps1 파일을 로드하고 $MyInvocation을 받으려 했을 때입니다.나의 사령부.경로가 null입니다.제 Powershell 버전은 4.0이었지만 ISE의 경우 1.0(%windir%\system32)이었습니다.Windows PowerShell\v1.0\PowerShell_ISE.exe).

그러나 처음에는 $MyInvocation을 수동으로 검사했을 때 그들이 왜 작동해야 하는지 생각하지 못했습니다.나의 사령부.PowerShell에서 경로 또는 $MyInvocation이 null인 이유 및 분할 경로 상위 $MyInvocation에 대해 null 오류가 발생하는 이유입니다.나의 사령부.경로.

그래서 데스크톱 NUC PC에서처럼 Windows 2012 R2 Server에서 파워셸을 5.1로 업그레이드해야 한다고 생각했습니다.

가장 큰 문제는 .ps1 파일에 중단점을 설정하고 작업 중인 지점까지 실행하면 다음과 같은 결과가 나온다는 것입니다.

$ScriptDir = 분할 경로 - 상위 $MyInvocation.My Command.Path

효과가 있다는 걸.물론 효과가 있었습니다, 한동안 사용하고 있었습니다.왜 전에 못 봤을까요?

뭐가 잘못됐나요?run step 명령을 사용하여 수동으로 PowerShell을 실행하려고 했는데, PowerShell이 열린 이후로 스크립트를 실행해 본 적이 없었습니다!

저는 지금이 아마도 노 두(No Duh)의 순간이라고 말해야겠습니다.

하지만 최근 서버가 다운되어 복구(VSphere Clustered) 및 재시딩이 이루어졌기 때문에 이전 버전의 PowerShell이 있는 것 같습니다.

PowerShell을 사용하면 내부에 여러 파일/윈도우를 열 수 있지만 변수는 서로 공유됩니다.스크립트를 실제로 실행하려고 할 때까지(단계적으로 실행하는 것이 아니라) 실행 중인 스크립트 파일이 없으므로 경로를 얻을 수 없습니다.

나는 이 게시물이 나처럼 많은 시간을 낭비하지 않는 누군가를 구했으면 좋겠습니다!

그냥 쓰시면 될 것 같아요: & .\MySuperDuperScript.ps

언급URL : https://stackoverflow.com/questions/18742354/myinvocation-mycommand-path-returning-null

반응형