파워쉘 출력을 파일로 리다이렉트하는 방법: Out-File 완벽 가이드

시장에서 텍스트 파일에 출력을 저장할 수 있는 PowerShell cmdlet을 찾고 있다면 행운입니다. PowerShell Out-File cmdlet을 사용하는 방법과 함께 인기 있는 Out-File -Append 매개변수를 사용하는 방법을 배우게 될 것입니다!

Out-File이 어떻게 작동하는지?

이 PowerShell cmdlet은 간단합니다. 유일한 목적은 받은 출력을 저장하고 텍스트 파일에 저장하는 것입니다.

이것은 표준 출력 리디렉션 연산자 (>)를 대체하도록 설계되었습니다. DOS 시대부터 출력을 파일로 리디렉션할 수 있었습니다. 이 cmdlet은 PowerShell에서 그것을 수행하는 방법입니다.

Out-File cmdlet은 일반적으로 PowerShell 파이프라인의 끝에서 사용됩니다. 유일한 목적은 원시 출력을 무조건적으로 텍스트 파일로 보내는 것입니다. 출력이 작성되는 방법을 조정할 수 있는 방법이 매우 적습니다.

파일로 출력 보내기

컴퓨터의 모든 Windows 서비스 목록을 반환하는 스크립트가 있다고 가정해 보겠습니다. Get-Service를 실행하면 콘솔에서 예상할 수 있는 모든 객체를 받게 됩니다.

그러나 그 출력을 텍스트 파일에 저장하고 싶을 수도 있습니다. Out-File cmdlet을 사용하면 이를 수행할 수 있습니다. 파이프라인을 통해 거의 모든 것을 전달하여 사용할 수 있습니다.

아래에서 Get-Service의 출력이 콘솔에 표시된 것과 동일한 텍스트 파일을 생성한 cmdlet으로 전송되었습니다. Services.txt라는 이름의 텍스트 파일이 생성되었고, 정확히 콘솔에서 보는 것과 같은 내용이 포함되어 있습니다.

PS> Get-Service | Out-File -FilePath C:\Services.txt
PS> Get-Content C:\Services.txt
Status   Name               DisplayName

Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
Stopped  Appinfo            Application Information
Stopped  AppMgmt            Application Management
<SNIP>

파일에 추가하기

기본적으로 FilePath 매개변수를 통해 제공된 텍스트 파일에는 무엇이든 덮어쓰기를 합니다. 그러나 Append 매개변수를 사용하여 이 동작을 무시할 수 있습니다.

아마도 파일에 콘솔 출력을 축적하고 있으며 덮어쓰기 대신 파일에 텍스트를 추가하려고 할 것입니다. Append 매개변수가 유용할 것입니다.

Out-File -Append 매개변수를 사용하면 아래에서 볼 수 있듯이, 사용하지 않으면 C:\File.txt가 덮어쓰기됩니다. 그러나 Append 매개변수를 추가하면 즉시 출력이 끝에 추가됩니다.

PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content -Path C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt
PS> Get-Content C:\File.txt
foo
PS> 'foo' | Out-File -FilePath C:\File.txt -Append
PS> Get-Content C:\File.txt
foo foo

출력 변경하기

기본적으로 이 cmdlet은 콘솔에 표시된 내용을 복제하려고 시도하지만 조작할 수 있는 몇 가지 방법이 있습니다. 예를 들어, cmdlet에는 모든 새 줄 문자를 단순히 제거하는 NoNewLine 매개변수가 있습니다.

PS> Get-Service | Out-File -FilePath C:\Services.txt -NoNewline
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application La

또는 각 행의 텍스트를 특정 문자 수로 자를 수도 있습니다. Width 매개변수를 사용하여.

PS> Get-Service | Out-File -FilePath C:\Services.txt -Width 30 
PS> Get-Content C:\Services.txt
Status   Name               DisplayName
------   -----              -----------
Stopped  AJRouter           Al

결론

Out-File

실제 시나리오에서는 이 cmdlet이 작동하지만 파일에 출력을 저장하는 더 나은 방법이 있습니다.

이 cmdlet은 출력을 조작할 수 있는 실질적인 옵션을 제공하지 않습니다. 단순히 콘솔에 표시된 내용을 정확히 텍스트 파일로 저장합니다. 이 cmdlet은 PowerShell 트랜스크립트와 유사하여 모든 것을 직접 텍스트 파일로 작성합니다.

Add-Content 또는 Set-Content cmdlet은 항상 더 많은 유연성을 가지고 있지만 PowerShell 출력을 파일로 빠르게 가져오려면 Out-File을 사용하는 것이 좋습니다.

관련 정보: Set-Content: 파일에 쓰는 PowerShell 방법

Source:
https://adamtheautomator.com/out-file/