Nice programing

IDE를 사용할 때 Powershell에서 타사 실행 파일을 호출 할 때 오류 발생

nicepro 2020. 11. 24. 19:52
반응형

IDE를 사용할 때 Powershell에서 타사 실행 파일을 호출 할 때 오류 발생


du.exe ( 원래 Sysinternals의 디스크 사용량 )를 사용하여 디렉터리 크기를 계산 하는 PowerShell 스크립트가 있습니다.

du c:\Backup콘솔에서 실행하면 예상대로 작동하지만 ISE 또는 PowerGui에서 실행되는 동일한 코드 줄이 예상 결과와 오류를 제공합니다.

+ du <<<<  c:\backup
+ CategoryInfo          : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

왜 그런 겁니까? 이 오류를 어떻게 피합니까? 을 사용하여 invoke-expression을 시도 &했지만 이동하지 않았습니다.

도와 주셔서 감사합니다.


이를 방지하려면 stderr을 null로 리디렉션 할 수 있습니다. 예 :

du 2> $null

기본적으로 콘솔 호스트와 ISE (및 원격)는 stderr 스트림을 다르게 처리합니다. 콘솔 호스트에서 PowerShell이 ​​edit.com과 같은 애플리케이션을 지원하여 컬러 출력 및 오류를 화면에 기록하는 다른 애플리케이션과 함께 작동하는 것이 중요했습니다. I / O 스트림이 콘솔 호스트에서 리디렉션되지 않으면 PowerShell은 네이티브 EXE에 직접 쓸 콘솔 핸들을 제공합니다. 이것은 PowerShell을 우회하므로 PowerShell은 작성된 오류가 있음을 알 수 없으므로 $ error를 통해 또는 PowerShell의 stderr 스트림에 기록하여 오류를보고 할 수 없습니다.

ISE 및 원격 기능은이 시나리오를 지원할 필요가 없으므로 stderr에서 오류를 확인하고 이후에 오류를 작성하고 $ error를 업데이트합니다.


최근에 동일한 문제에 직면했지만 stderr 출력을 stdout으로 보내고 싶습니다. 다음이 작동한다고 생각할 것입니다.

    & du 2>&1

그러나 PowerShell은 리디렉션을 해석하고 'du'가 완료된 후 처리합니다. 내가 찾은 해결 방법은 cmd.exe / c를 사용하여 호출하는 것입니다.

    & cmd /c 'du 2>&1'

NativeCommandError출력 을 억제하는 또 다른 방법 은 파이프 라인 객체이 답변 의 맨 아래에 설명 된대로 문자열변환하는 것입니다 .

du c:\Backup 2>&1 | %{ "$_" }

시험:

du 2>&1 | %{ "$_" }

이전 FIX는 오류를 리디렉션하지만 예를 들어 사용자 이름 또는 암호가 좋지 않거나 통합 인증을 사용하는 경우 액세스 권한이없는 경우 실제 오류를 잃을 수 있습니다.

따라서 여기에 오류 처리를 구현하고 psexec에 의해 발생한 특정 오류 (즉, 오류가 아님)를 우회하는 방법이 있습니다.

 try{
            	psexec command .....
            }
            catch [System.Management.Automation.RemoteException]{
                if ($_.TargetObject -like "Connecting to *" -and $_.CategoryInfo.Category -eq "NotSpecified" -and $_.FullyQualifiedErrorId -eq "NativeCommandError" -and $_.InvocationInfo.MyCommand.Name -like "psexec*.exe"){
                    $error.Remove[$Error[0]]
                }
                else{
                    Throw
                }
            }        
            catch{
                throw
            }

참고 URL : https://stackoverflow.com/questions/2095088/error-when-calling-3rd-party-executable-from-powershell-when-using-an-ide

반응형