Powershell에서 .exe 실행의 모든 출력을 파이프로 연결하는 방법은 무엇입니까?
파워셸에서 나는 달리고 있습니다.psftp.exe
Pu 입니다.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
언급URL : https://stackoverflow.com/questions/15437244/how-to-pipe-all-output-of-exe-execution-in-powershell
'programing' 카테고리의 다른 글
요청한 버전과 일치하는 NDK 버전이 없습니다. (0) | 2023.08.25 |
---|---|
스프링 3 mvc를 GWT와 통합한 경험이 있습니까? (0) | 2023.08.25 |
함수 내에서 PowerShell 함수 이름을 검색하는 방법이 있습니까? (0) | 2023.08.25 |
jQuery를 사용하여 첫 번째 부모 DIV를 선택하는 방법은 무엇입니까? (0) | 2023.08.25 |
원격 시스템에서 python을 사용하여 mariadb 연결 (0) | 2023.08.25 |