자동화로 텍스트 파일에서 데이터를 읽는 것은 흔한 시나리오입니다. 대부분의 프로그래밍 언어는 텍스트 파일을 읽는 방법을 하나 이상 가지고 있으며 PowerShell도 예외는 아닙니다. PowerShell Get-Content
cmdlet은 텍스트 파일의 내용을 읽고 데이터를 PowerShell 세션으로 가져오는데 사용됩니다.
PowerShell Get-Content
cmdlet은 스크립트의 입력으로 텍스트 파일을 사용해야 할 때 꼭 필요한 도구입니다. 아마도 PowerShell 스크립트가 컴퓨터 목록을 모니터링하거나 사용자에게 전송할 이메일 템플릿을 가져와야 할 수도 있습니다. PowerShell Get-Content
는 이러한 시나리오를 쉽게 지원합니다!
실시간으로 로그 파일을 따라가는 것은 어떨까요? 네, PowerShell Get-Content
로도 가능합니다! 이 문서를 계속 읽으면 PowerShell에서 텍스트 파일을 읽는 방법을 배우게 됩니다.
전제 조건
이 튜토리얼의 예제를 따라하려면 다음 요구 사항이 필요합니다.
- Windows 10을 실행하는 컴퓨터가 필요합니다. 이 튜토리얼은 Windows 10 버전 20H2를 사용합니다. 하지만 걱정하지 마세요, 사용 중인 Windows 10 버전으로도 문제 없습니다.
- 컴퓨터에 Windows PowerShell 5.1 또는 PowerShell 7.1 이상이 설치되어 있어야 합니다. 여기서는 PowerShell 7.1을 사용했지만 두 버전 중 어느 것이든 사용할 수 있습니다!
- 당신은 명령을 작성하고 테스트할 것이기 때문에 코드 편집기가 필요합니다. 권장되는 편집기는 Windows PowerShell ISE(Windows에 내장)와 Visual Studio Code (VSCode)입니다. 이 문서에서는 VSCode를 사용합니다.
- 또한 컴퓨터에 작업 디렉터리를 만들면 도움이 됩니다. 작업 폴더는 원하는 위치에 있어도 상관 없습니다. 그러나 이 튜토리얼의 예제는 보통 C:\demo 폴더에 있음을 알 수 있습니다.
- 시작하려면 어떤 내용이든 필요합니다! 작업 디렉터리에 fruits.txt라는 이름의 파일을 만드세요. 이 파일에는 단순하게 열 가지 다른 과일이 포함되어 있어야 합니다. 이 텍스트 파일은 모든 예제에서 사용됩니다.
어떤 PowerShell 버전을 사용 중인지 모르겠나요? 기사 PowerShell 버전 확인하는 방법 (모두 다!)을 참조하세요.
텍스트 파일 읽기 및 결과를 문자열 배열로 반환하기
Get-Content
cmdlet은 파일에서 내용을 읽으며 기본적으로 텍스트 파일의 각 줄을 문자열 개체로 반환합니다. 결과적으로 PowerShell 객체의 컬렉션이 문자열 객체의 배열이 됩니다.
아래 코드는 fruits.txt 파일의 내용을 읽고 결과를 PowerShell 콘솔에 표시합니다(아래 스크린샷 참조).

Get-Content
. Get-Content
는 내용을 배열로 읽어 저장하지만 확실한 방법은 무엇일까요? 먼저 PowerShell 객체에 내용을 저장한 다음 형식을 확인하여 알 수 있습니다.
화면 캡처를 보면, $fruits
변수는 10개의 객체를 포함하는 배열입니다. 각 객체는 하나의 텍스트 줄을 나타냅니다.

텍스트 파일에서 특정 줄 반환
이전 예제에서 기본 Get-Content
결과가 배열이거나 객체의 컬렉션임을 배웠습니다. 컬렉션의 각 항목은 인덱스 번호에 해당하며, PowerShell 인덱스는 일반적으로 0부터 시작합니다.
아래 스크린샷에서 문자열 배열에는 열 개의 항목이 있음을 보여줍니다. 배열은 0부터 9까지 열 개의 항목을 인덱싱했습니다.

컨텐츠의 다섯 번째 줄만 표시하려면, 배열 표기법으로 알려진 대괄호로 묶인 인덱스 번호 4
를 지정해야 합니다.
Get-Content
명령이 괄호로 묶인 것을 알 수 있습니다. 이 표기법은 PowerShell에게 다른 작업보다 먼저 괄호로 묶인 명령을 실행하라고 알려줍니다.
아래 스크린샷에서 반환된 결과가 raspberry
뿐인 것을 볼 수 있습니다. 이것은 인덱스 4
의 항목으로, 텍스트 파일의 다섯 번째 줄에 해당합니다.

Get-Content
results.마지막 줄의 내용을 가져와야 할 때는 어떻게 해야 할까요? 다행히도 전체 줄 수를 알 필요가 없습니다. 대신 인덱스로 [-1]
을 사용하면 Get-Content
가 파일의 마지막 줄만 표시합니다.
Get-Content
가 반환하는 최상위 결과의 수 제한
TotalCount
매개변수를 사용하여 Get-Content
로 텍스트 파일에서 지정된 행 수를 검색합니다. TotalCount
매개변수는 long 값을 허용하며 이는 9,223,372,036,854,775,807의 최대 값입니다.
예를 들어, 아래 명령은 내용을 읽고 결과를 세 항목으로 제한합니다.
당연히 아래 결과는 텍스트 파일의 처음 세 줄만 표시합니다.

Get-Content
command and the TotalCount
parameter.파일 끝에서 결과를 반환하려면 PowerShell Tail 매개변수를 사용하십시오
이전 예에서는 PowerShell Get-Content
cmdlet을 사용하여 텍스트 파일을 읽고 상위 결과를 제한했습니다. PowerShell Get-Content
을 사용하여 반대로도 가능합니다. PowerShell Tail
매개변수를 사용하여 파일 끝에서 지정된 행 수를 읽습니다.
아래 코드 예제는 텍스트 파일을 읽고 하단 네 줄의 내용을 표시합니다.
PowerShell tail
명령을 실행한 후 예상되는 결과는 아래 이미지에서와 같이 내용의 마지막 네 줄로 제한됩니다.

Get-Content
Tail
parameter.Tail
매개변수는 종종 Wait
매개변수와 함께 사용됩니다. Wait
매개변수를 사용하면 파일이 열린 채로 유지되며 매 초마다 새로운 내용을 확인합니다. 아래 데모에서는 Tail
및 Wait
매개변수가 작동하는 것을 보여줍니다. Wait
를 종료하려면 CTRL+C
키 조합을 사용합니다.

wait
and Tail
parameters with Get-Content
.결과를 단일 문자열로 반환합니다.
이전 예제에서 알 수 있듯이 PowerShell Get-Content
출력으로 문자열 배열을 처리했습니다. 그리고 지금까지 배운 대로 배열의 성질은 콘텐츠를 한 항목씩 처리할 수 있게 합니다.
배열은 종종 훌륭하게 작동하지만 문자열을 대체하는 것이 더 어려울 수 있습니다. Get-Content
의 Raw
매개변수는 파일의 전체 내용을 단일 문자열 객체로 읽습니다. 아래 코드는 첫 번째 예제에서 사용한 것과 동일하지만, Raw
매개변수는 파일 콘텐츠를 단일 문자열로 저장합니다.
아래 스크린샷은 Get-Content
에 Raw
매개변수를 추가하면 콘텐츠를 단일 문자열로 처리하고 객체 배열이 아니라는 것을 보여줍니다.

Raw
parameter of Get-Content
reads the file content as a single string object.파일의 내용을 Raw
매개변수를 사용하여 단일 문자열로 얻은 후에는 어떻게 할 수 있을까요? 아마도 해당 파일의 콘텐츠 내에서 문자열을 찾아 대체해야 할 수도 있습니다. 아래 예제에서 Get-Content
는 파일의 내용을 단일 문자열로 읽습니다. 그런 다음 replace
연산자를 사용하여 특정 단어를 다른 단어로 대체합니다.관련: 문자열 찾기 및 대체

replace
operator.필터와 일치하는 파일에서만 콘텐츠를 읽습니다.
일부 파일의 콘텐츠를 읽어야 하는 폴더가 있나요? PowerShell의 Get-Content
를 사용하면 파일을 따로 필터링하지 않고도 파일 내용을 읽을 수 있습니다. Get-Content
의 Filter
매개변수를 사용하여 cmdlet이 읽을 파일을 제한할 수 있습니다.
일부 파일의 콘텐츠만 읽는 방법을 보여주기 위해 먼저 읽을 파일 몇 개를 생성하세요. 아래에 나와 있는대로 Add-Content
를 사용하여 작업 폴더에 파일을 생성하세요.

.log
files using Add-Content
.테스트 파일이 생성되었다면, Filter
와 Path
매개변수를 사용하여 루트 디렉토리의 .log
파일만 읽습니다. 필터 정의에서 사용하는 별표는 .log
로 끝나는 모든 파일을 읽도록 Get-Content
에 알려줍니다. 경로 매개변수의 끝에 있는 별표는 파일을 루트 디렉토리만 읽도록 제한합니다.
아래 출력에서는 .log
파일의 콘텐츠만 표시됩니다.

Filter
parameter with PowerShell Get-Content
to limit the read files.관련 정보: Get-ChildItem: 파일, 레지스트리, 인증서 등을 한 번에 나열하기
파일의 대체 데이터 스트림 읽기
지금까지 텍스트 파일만 다루었지만, Get-Content
는 파일의 대체 데이터 스트림(ADS)에서 데이터를 읽을 수 있습니다. 스트림에 대해 더 알아보기를 참고하십시오. 그러나 스트림은 일반적인 파일 내용과 함께 저장된 다른 데이터 속성으로 생각할 수 있습니다.
대체 데이터 스트림은 Windows NTFS 파일 시스템의 기능이므로, 비-Windows 운영 체제에서
Get-Content
를 사용할 때는 해당되지 않습니다.
Stream
매개변수를 사용하여 Get-Item
을 실행하여 대체 데이터 스트림을 볼 수 있습니다. 파일을 참조할 때 Stream
매개변수를 사용하면 아래에 표시된 것처럼 Stream
이라는 속성을 반환합니다. 이 기본 파일 콘텐츠 스트림은 :$DATA
로 표시됩니다.
기본 :$DATA
스트림을 보여주기 위해 Get-Item
cmdlet을 사용하여 파일 fruits.txt의 모든 사용 가능한 스트림을 표시합니다. 아래에서 볼 수 있듯이, Get-Item
은 단일 스트림을 표시합니다.

Get-Item
.Get-Content
의 Stream
매개변수는 아래에 표시된 것처럼 기본 :$DATA
스트림의 콘텐츠를 명시적으로 읽습니다. 반환된 내용은 기본 Get-Content
출력과 동일하며, 기본적으로 :$DATA
스트림이 읽힙니다.

:$DATA
stream using Get-Content
.Get-Content
를 사용하여 대체 데이터 스트림을 검색하는 방법을 보여주기 위해 파일을 수정하고 Add-Content
를 사용하여 새 스트림을 추가합니다. 아래 예제에서와 같이 Get-Item
을 사용하여 새 스트림을 기본 :$DATA
스트림과 함께 표시합니다.

기본적으로 :$DATA
스트림만 읽히기 때문에, Get-Content
의 Stream
매개변수를 사용하여 새로운 Secret
스트림 콘텐츠를 검색합니다. 아래 예제에서는 기본 파일 콘텐츠 대신 Secret
스트림 콘텐츠가 표시됩니다.

Get-Content
to read the Secret
alternate data stream content.PowerShell의 Get-Content
로 다음 단계
이 문서에서는 Get-Content
를 사용하여 콘텐츠를 읽고 조작하는 여러 가지 방법을 배웠습니다. 심지어 Get-Content
가 대체 데이터 스트림에서 콘텐츠를 읽을 수 있는 유연성도 알게 되었습니다!
이 문서에서 배운 내용을 활용하여 Get-Content
를 어떻게 사용할 수 있을까요? 예를 들어, 백업 파일이 구식인지 확인하고 자동으로 백업 작업을 실행하도록 호출하는 기능을 작성하는데 Get-Content
를 사용할 수 있을 것입니다.
Source:
https://adamtheautomator.com/powershell-get-content/