programing

Powershell에서 .exe 실행의 모든 출력을 파이프로 연결하는 방법은 무엇입니까?

bestprogram 2023. 8. 25. 23:49

Powershell에서 .exe 실행의 모든 출력을 파이프로 연결하는 방법은 무엇입니까?

파워셸에서 나는 달리고 있습니다.psftp.exePu 입니다.TTY 홈페이지.나는 이것을 하고 있습니다.

$cmd = "psftp.exe"
$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = & $cmd $args

이것은 작동합니다; 그리고 저는 인쇄하고 있습니다.$output그러나 "원격 작업 디렉토리는 [...])를 입력하고 다른 출력을 다음과 같은 오류 유형으로 보냅니다.

psftp.exe : Using username "username@ssh".
At C:\full_script.ps1:37 char:20
+         $output = & <<<<  $cmd $args
    + CategoryInfo          : NotSpecified: (Using username "username@ssh".:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

이 "사용자 이름 사용..." 등은 일반 FTP 메시지처럼 보입니다.모든 출력이 입력되도록 하려면 어떻게 해야 합니까?$output?

문제는 일부 출력이 STDERR로 전송되고 있으며 리디렉션이 PowerShell에서 CMD와 다르게 작동한다는 것입니다.EXE.

콘솔 프로그램의 출력을 PowerShell의 파일로 리디렉션하는 방법에는 문제에 대한 설명이 잘 되어 있고 해결 방법이 교묘합니다.

기본적으로, 전화.CMD실행 파일을 매개 변수로 사용합니다.다음과 같이:

갱신하다

코드가 제대로 작동하도록 수정했습니다.:)

$args = '"username@ssh"@ftp.domain.com -b psftp.txt';
$output = cmd /c psftp.exe $args 2`>`&1

한 번 해보세요

$output = [string] (& psftp.exe 'username@ssh@ftp.domain.com' -b psftp.txt 2>&1)

다음에 대한 PowerShell 버그가 있습니다.2>&1오류 기록을 만드는 것.[string]주위에 일거리를 던지다

& "my.exe" | Out-Null    #go nowhere    
& "my.exe" | Out-Default # go to default destination  (e.g. console)
& "my.exe" | Out-String  # return a string

파이프는 실시간으로 그것을 반환할 것입니다.

& "my.exe" | %{    
   if ($_ -match 'OK')    
   { Write-Host $_ -f Green }    
   else if ($_ -match 'FAIL|ERROR')   
   { Write-Host $_ -f Red }   
   else    
   { Write-Host $_ }    
}

참고: 실행된 프로그램이 0 종료 코드 이외의 다른 코드를 반환하면 파이프가 작동하지 않습니다.다음과 같은 리디렉션 연산자를 사용하여 강제로 파이프에 연결할 수 있습니다.2>&1

& "my.exe" 2>&1 | Out-String

출처:

https://stackoverflow.com/a/7272390/254276

https://social.technet.microsoft.com/forums/windowsserver/en-US/b6691fba-0e92-4e9d-aec2-47f3d5a17419/start-process-and-redirect-output-to-powershell-window

언급URL : https://stackoverflow.com/questions/15437244/how-to-pipe-all-output-of-exe-execution-in-powershell