오류 메시지를 읽기 전에 Powershell 창이 사라짐
Powershell 스크립트를 호출할 때 호출된 스크립트가 명령 창을 닫지 않도록 하려면 어떻게 해야 합니까?오류가 발생하고 있습니다. 오류를 읽을 수만 있다면 수정할 수 있을 것입니다.
를 사용하여 첨부 파일과 함께 전자 메일을 보내는 Powershell 스크립트가 있습니다.NET 클래스.명령줄에서 스크립트를 실행하거나 윈도우즈 스케줄러에서 스크립트를 호출하여 직접 호출하면 정상적으로 작동합니다.다른 스크립트(Iron Python, 문제가 된다면) 내에서 호출하면 실패합니다.모든 시나리오가 내 개발 기계에서 잘 작동합니다. ("내 기계 작업" 로고를 꼭 받아야 합니다!)Powershell에 전화를 걸었는데 명령 창이 표시되고 닫히기 직전에 빨간색 점멸이 보입니다.
죄송합니다: 파워셸 1.0, 아이언 파이썬 1.1
솔루션: powershell -noexit d:\script\foo.ps1
출구 없음 스위치가 정상적으로 작동했습니다.Iron Python에서 전달한 주장에 추가했습니다.제가 예상했던 대로 아마 제 스스로 고칠 수 있는 부분입니다(집행 방침은 일시적으로 아무런 영향 없이 무제한으로 설정한 것이기 때문에 좀 더 깊이 살펴봐야 할 것 같습니다).그것 때문에 문제가 생기면 다른 질문을 하겠습니다.
도와주신 모든 분들께 감사드립니다.파워셸 스위치를 조금 더 자세히 조사해야 한다는 것을 알게 되었고, 앞으로 유용할 것들을 꽤 많이 볼 수 있습니다.
사용해 보십시오.-noexit
스위치:
powershell -noexit d:\script\foo.ps1
PowerShell Console 창이 닫히지 않도록 방지하는 세 가지 옵션이 기본적으로 제공됩니다. 이 옵션에 대해서는 블로그 게시물에서 자세히 설명합니다.
- 일회성 수정: PowerShell 콘솔에서 스크립트를 실행하거나 -NoExit 스위치(예: 종료 안 함)를 사용하여 PowerShell 프로세스를 시작합니다.
PowerShell -NoExit "C:\SomeFolder\SomeScript.ps1"
- 스크립트별 수정: 스크립트 파일의 끝에 입력을 위한 프롬프트를 추가합니다.
Read-Host -Prompt "Press Enter to exit"
- 글로벌 수정: 스크립트 실행이 완료된 후에는 항상 PowerShell Console 창을 열어두도록 레지스트리 키를 변경합니다.
다음은 옵션 #3에 대해 수정할 레지스트리 키입니다.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"& \\\"%1\\\"\""
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \\\"%1\\\"\""
자세한 정보와 레지스트리 변경사항을 자동으로 적용할 .reg 파일은 내 블로그를 참조하십시오.
이전에도 이 기능이 필요했지만 일반적으로 스크립트를 수정하고 싶지 않았습니다(일반적으로 작업 스케줄러에서 실행되는 스크립트의 경우).저는 그저 위로하기 위해 뱉은 것이 무엇인지 보고 싶었습니다.
스크립트 호출 후 읽기-호스트 명령을 추가하기만 하면 됩니다. 예:
PowerShell.exe -command { .\foo.ps1; read-host "Press enter key to continue" }
BTW Start-Transcript를 사용할 때의 문제는 EXE 출력을 캡처하지 않는다는 것입니다.또한 표준 호스트를 사용하여 V1 및 V2에서 로깅을 시도하는 모든 형식은 상세, 디버그, 진행률 또는 경고 스트림을 캡처하지 않습니다.연결된 호스트 창을 보는 경우에만 이러한 창을 볼 수 있습니다.
모든 스크립트 출력(stdout, stderr, verbose, warning, debug)을 캡처하는 한 가지 저렴하지만 효과적인 방법은 cmd.exe와 같은 다른 호스트를 사용하는 것입니다.
cmd.exe /c powershell.exe "$pwd\foo.ps1" > foo.log
오류가 발생한 경우를 제외하고 스크립트를 자동으로 닫는 것은 일반적으로 문제가 없습니다.$ErrorActionPreference를 기본 'Continue'에서 변경하지 않았다고 가정하면, 앞서 설명한 동작에 대해 스크립트 끝에 이 작업을 수행합니다.
if ($Error)
{
Pause
}
일반적인 시도는 없습니다...Powershell에서 구성을 캡처하지만 대신 예외를 트랩하고 적절하게 대응할 수 있습니다.I.E:
Function Example() {
trap [Exception] {
write-host "We have an error!";
write-error $("ERROR: " + $_.Exception.Message);
sleep 30;
break;
}
write-host "Hello world!";
throw "Something very bad has happened!";
}
시도를 시뮬레이션할 수도 있습니다...유역 구조:
Function Example2() {
${
write-host "Our try clause...";
throw "...caused an exception! It hurts!";
}
trap [Exception] {
write-error $_.Exception.Message;
sleep 30;
continue;
}
물론 예외를 트랩하는 즉시 로그를 기록하거나, 절전 모드로 설정하거나, 오류 메시지를 사용하여 원하는 대로 설정할 수 있습니다.내 예는 단지 잠을 자서 무슨 일이 일어났는지 읽을 수 있게 해주지만, 모든 오류를 기록하는 것이 훨씬 더 좋습니다. (가장 간단한 방법은 >>로 리디렉션하는 것입니다.)
http://huddledmasses.org/trap-exception-in-powershell/ 에서도 확인할 수 있습니다. ▁look
빠르고 더러운 해결책은 +를 S사용하여 디스플레이 스크롤을 중지하고 +Q를 사용하여 다시 시작하는 것입니다.
세 가지 옵션이 있습니다.
- 스크립트에서 캐치를 수행합니다(Powershell V2를 사용하는 경우).
- 아이언 파이썬 스크립트에서 변수로 액세스할 수 있는 stdout을 캡처하고 리디렉션하는 더미 스크립트를 작성합니다.VBS/Wscript 인트로 이것에 추가된 것은 읽기-호스트 명령을 자유롭게 모든 곳에 떨어뜨리고 페이지로 돌아가기를 누르는 것입니다.
셸에 아무것도 출력하지 말고 모든 출력을 로그 파일로 리디렉션하는 두 번째 스크립트로 파워셸 스크립트를 래핑합니다.
PSC:> myscript.ps1 | Out-File myscript.log
를 작성run_ps_script.bat
가 포함된 파일
@PowerShell.exe -command "try { %1 } finally { read-host 'Press ENTER...' }"
합니다.PowerShell
제 해결책은 powershell로 파일 -> execute를 마우스 오른쪽 버튼으로 클릭하는 대신 콘솔 창에서 명령줄로 스크립트를 실행하는 것이었습니다.
스크립트 실행이 종료된 경우에도 콘솔에 오류 메시지가 계속 표시됩니다.
stdout 및 stderr을 파일 ex로 리디렉션하는 것에 대해 생각해 본 적이 있습니까?
./ascript.ps1 > 메시지 2>&1
참고: 필요한 모든 리디렉션을 사용하여 파워셸 스크립트를 호출하는 래퍼 스크립트를 powershell에 만들 수 있습니다.
내 .PS1 스크립트는 Powershell 콘솔에서 정상적으로 실행되었지만 "두 번 클릭" 또는 "Powershell과 함께 열기"를 마우스 오른쪽 버튼으로 클릭하면 '열림/닫힘' 문제가 나타납니다.
스크립트 폴더의 이름을 공백이 없는 이름으로 바꾸는 것이 해결책이었습니다.
그런 다음 모든 것이 작동했습니다. Windows에서는 "C:\내 폴더\myscript.ps1"이지만 "C:\is_is_my_folder\myscript.ps1"은 제대로 작동했습니다.
몇 가지 아이디어가 더 있습니다.스크립트 끝에 start-sleep cmdlet을 사용하여 오류를 검토할 수 있는 충분한 시간을 제공할 수 있습니다.
시작 스크립트를 사용하여 세션을 텍스트 파일에 기록할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/1337229/powershell-window-disappears-before-i-can-read-the-error-message
'programing' 카테고리의 다른 글
JSP/Servlet 및 Ajax를 사용하여 서버에 파일을 업로드하려면 어떻게 해야 합니까? (0) | 2023.08.15 |
---|---|
태그에서 기본값() 방지 (0) | 2023.08.15 |
프로젝트는 모든 파일을 나열하거나 '포함' 패턴을 사용해야 합니다. (0) | 2023.08.15 |
IE9 JavaScript 오류: SCRIPT5007: 'ui' 속성의 값을 가져올 수 없음: 개체가 null이거나 정의되지 않았습니다. (0) | 2023.08.10 |
Android 응용 프로그램의 "번들"이란 무엇입니까? (0) | 2023.08.10 |