sourcecode

Windows PowerShell에서 표준 입력/출력 리다이렉트

copyscript 2023. 4. 9. 22:18
반응형

Windows PowerShell에서 표준 입력/출력 리다이렉트

Windows PowerShell에서 표준 입력/출력을 수정하는 데 필요한 구문은 무엇입니까?

UNIX에서는 다음을 사용합니다.

$./program <input.txt >output.txt

PowerShell에서 동일한 작업을 실행하는 방법은 무엇입니까?

파일을 stdin에 직접 연결할 수는 없지만 stdin에 액세스할 수는 있습니다.

Get-Content input.txt | ./program > output.txt

대용량 파일에 대한 'Get-Content' 대안을 찾는 사용자가 있다면 PowerShell에서 CMD를 사용할 수 있습니다.

cmd.exe /c ".\program < .\input.txt"

또는 다음 PowerShell 명령을 사용할 수 있습니다.

Start-Process .\program.exe -RedirectStandardInput .\input.txt -NoNewWindow -Wait

같은 창에서 프로그램을 동기화합니다.그러나 PowerShell 스크립트에서 실행할 때 이 명령어의 결과를 변수에 쓰는 방법을 찾을 수 없었습니다. 왜냐하면 이 명령어는 항상 콘솔에 데이터를 쓰기 때문입니다.

편집:

시작-프로세스에서 출력을 얻으려면 옵션을 사용할 수 있습니다.

- 리다이렉트 표준 리다이렉트

출력을 파일로 리디렉션한 다음 파일에서 읽습니다.

Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"

출력 리다이렉트에는 다음을 사용할 수 있습니다.

  command >  filename      Redirect command output to a file (overwrite)

  command >> filename      APPEND into a file

  command 2> filename      Redirect Errors 

입력 리다이렉션은 다른 방법으로 동작합니다.예를 들어 이 Cmdlet http://technet.microsoft.com/en-us/library/ee176843.aspx을 참조하십시오.

또는 다음 작업을 수행할 수 있습니다.

예를 들어 다음과 같습니다.

$proc = Start-Process "my.exe" "exe commandline arguments" -PassThru -wait -NoNewWindow -RedirectStandardError "path to error file" -redirectstandardinput "path to a file from where input comes"

프로세스의 에러가 발생했는지 아닌지를 확인하려면 , 다음의 코드를 추가합니다.

$exitCode = $120.get_ExitCode()

if ($exitCode){
    $errItem = Get-Item "path to error file"
    if ($errItem.length -gt 0){
        $errors = Get-Content "path to error file" | Out-String
    }
}

이렇게 하면 외부 프로그램/프로세스를 처리해야 할 때 스크립트 실행을 더 잘 처리할 수 있습니다.그렇지 않으면 스크립트가 외부 프로세스 오류에 노출될 수 있습니다.

또, 표준 에러와 표준 out이 같은 장소에 보내지도록 할 수도 있습니다(cmd에서는 2>&1이 마지막에 와야 합니다).

get-child item foo 2 >&1 > log

「>」는 「| out-file」과 같으며, 디폴트로는 unicode 또는 utf 16 입니다.또, 같은 텍스트 파일에 asciii 와 Unicode 를 혼재시킬 수 있기 때문에, 「>」에 주의해 주세요."| add-content" 가 ">" 보다 더 잘 동작할 수 있습니다."| set-content"가 ">"보다 더 좋을 수 있습니다.

6개의 스트림이 있어요.상세정보 : https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-5.1

당신이 할 수 있는 일은 텍스트 파일에 저장한 후 변수에 읽는 것뿐이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/11447598/redirecting-standard-input-output-in-windows-powershell

반응형