2010-07-24 3 views
2

작동하지 않습니다파워 쉘 출구 내가 레지스트리 값을 확인하고 및 0 인 경우 종료 스크립트를 작성하고

if ((Get-ItemProperty -path HKLM:\SOFTWARE\ICT\LoginScript).proceed -eq 0) { 

     $form.close() 
     exit    

     } 

(값이 1이면이 진행됩니다) 0에서 레지 값, 그것은 종료 실패하고 대신에 예외가 발생합니다 :

System.Management.Automation.ExitException: System error. 
    at System.Management.Automation.FlowControlNode.Execute(Array input, Pipe outputPipe, ExecutionContext context) 
    at System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context) 
    at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context) 
    at System.Management.Automation.StatementListNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context) 
    ... 

스크립트를 윈도우 폼을 사용하고 - 그와 관련이 있는지 확실하지 않습니다?

편집 : 시험 다음에 스크립트를 감소

:

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

$Form = New-Object System.Windows.Forms.Form 

$Form.Add_Shown({ $Form.Activate(); start-sleep -s 3; exit; $form.close() }) 
$Form.ShowDialog() 

그리고이 여전히 오류가 있습니다. Windows가 아닌 양식에 start-sleep -s 3; exit 코드를 실행하면 문제가 Windows Forms에 묶여있는 것처럼 보입니다. exit 지정

감사합니다,

+0

Get-ItemProperty는 무의미한 것 같습니다. 내 테스트에서 올바르지 만 (경로를 찾을 수없는 경우 던져 버릴지라도). 문제는 $ form.close()라고 생각합니다. 더 많은 것을 표시해야합니다 ($ form이 선언 된 방법 등). – TrueWill

+0

문제를 재현 할 수있는 전체 스크립트를 게시 할 수 있습니까? 여전히 문제를 재현하여 여기에 게시하는 최소한의 예제를 작성하십시오. 또한 명령 줄 (즉, 스크립트 파일이 아닌)을 통해 모든 것을 실행하고이 오류가 계속 발생하면보고하십시오. –

+0

위의 편집을 참조하십시오 - Windows 양식과 오류가있는 것 같습니다? – Ben

답변

1

Exit-PSSession하는 것과 같은 효과가 있습니다. stacktrace를 보면 코드가 다른 스레드에서 대화 형 세션을 끝내려고 시도하는 것 같아서 실패합니다.

방금 ​​스크립트를 끝내시겠습니까? 대신 [Runspace]::DefaultRunspace.CloseAsync()을 시도 할 수 있습니다.

+0

나는 이것을 시도했지만 파이프 라인이 멈췄다는 다른 오류가 발생했다. 또한 Exit-PSSession은 스크립트를 끝내지 않는 것일까? 명령에 오류가 없지만 Exit-PSSession 후에 계속 실행 중이다. – Ben

+0

함수 및/또는 부울 값을 사용해야하는 것처럼 들리지만 테스트가 실패하면 나머지 스크립트가 실행되지 않도록 부울 값을 어딘가에 설정하십시오. 예를 들어, 테스트 블록이 실패 할 경우 코드 블록을 실행하기 전에 실행하지 않으려면'if ($ failed) {exit} '와 같은 것을 넣으십시오. –

+0

예 - 뒤늦은 생각으로 이것이 최고 일 것 같아요. 네가 도와 줘서 고마워, 조지. – Ben

관련 문제