PowerShell에서 문자열은 아마도 가장 많이 사용되는 데이터 유형입니다. 메시지 표시, 입력 요청 또는 파일로 데이터 전송 등 스크립트 작성 시 문자열 없이는 거의 불가능합니다.
이 기사에서는 문자열이 단순히 읽고 표시하는 용도가 아니라 스크립트를 작성하는 목적에 맞게 조작될 수 있다는 것을 배우게 될 것입니다. 예를 들어, 문자나 전체 단어를 대체하거나 문자열을 연결하여 새로운 문자열을 형성하거나 하나의 문자열을 여러 개의 문자열로 분할하는 등의 작업이 가능합니다.
문자열 이해하기
.NET의 문자열 정의에 따르면, 문자열은 “텍스트를 나타내기 위해 사용되는 문자의 연속적인 컬렉션”입니다. 요약하면, 텍스트를 구성하는 문자들이 있을 때 문자열이라고 할 수 있습니다.
PowerShell에서 시스템 문자열 정의하기
문자열은 일련의 문자들을 작은따옴표(‘)나 큰따옴표(“)로 둘러싸는 것으로 정의됩니다. 아래는 문자열의 예시입니다.
실제로 문자열은 .NET에서 System.Strings로 정의됩니다.
위의 예시에서 볼 수 있듯이, 첫 번째 문자열은 작은따옴표로 둘러싸여 있고, 두 번째 문자열은 큰따옴표로 둘러싸여 있습니다. 궁금하신 분들을 위해, 두 가지의 유일한 차이점은 큰따옴표로 둘러싸인 문자열은 문자열 확장을 지원하고, 작은따옴표는 문자열을 그대로 표현한다는 것입니다.
작은따옴표와 큰따옴표 개념을 확인하기 위해 위의 예시에서 두 문자열을 PowerShell에 붙여넣으면 됩니다.
아래 스크린샷은 작은 따옴표로 묶인 문자열은 정의된 문자열을 정확히 반환하는 반면, 큰 따옴표로 묶인 문자열은 Get-Date
cmdlet의 표현식 결과와 함께 문자열을 반환한다는 것을 보여줍니다.

위에 표시된 결과는 문자열을 정의할 때 작은 따옴표 또는 큰 따옴표를 사용하는 것이 적절한 경우의 차이를 보여줍니다.
문자열 객체
이전 섹션에서 언급한 대로 텍스트를 형성하는 문자의 집합은 문자열입니다. 문자열의 결과 값은 String 객체입니다. String 객체는 [System.String] 형식의 .NET 객체입니다.
또한 System.String은 객체이므로 Get-Member
cmdlet을 사용하여 액세스할 수 있는 속성을 가지고 있습니다. 아래 예시에서는 큰 따옴표 내부에 변수를 삽입하고 있습니다.
아래 스크린샷은 String 객체의 TypeName과 속성의 일부 목록을 보여줍니다.

PowerShell 문자열 연결
문자열 연결은 두 개 이상의 문자열을 결합하여 별도의 문자열 객체에서 하나의 문자열 객체를 생성하는 것으로 설명됩니다. PowerShell에는 여러 가지 문자열 연결 방법이 있습니다. 각 방법은 다르며, 어떤 방법을 사용할지는 문자열 연결을 구현하는 방식에 따라 다릅니다.
A typical example of using string concatenation in the real world is Active Directory user creation. Perhaps you’re creating a user creation script that takes the first name, last name, and department values from a list.
문자열 연결을 사용하여 이름, 표시 이름, 사용자 이름 및 이메일 주소에 대한 표준 명명 규칙을 만들 수 있습니다. 이 예제에서는 아래에 표시된 문자열을 사용하여 작업합니다. 아래의 코드를 복사하여 PowerShell 세션에 붙여넣으세요.
위의 샘플 변수 값을 사용하여 아래에 나열된 값을 문자열을 연결하여 도출하는 것이 목표입니다.
- 이름 = 이름 성
- 표시 이름 = 이름 성 (부서)
- SamAccountName = 이름.성
- 이메일 주소 = 이름.성@contoso.com
다음 섹션에서는 PowerShell에서 사용 가능한 다른 문자열 연결 방법을 사용하여 위에 나열된 값들을 생성할 것입니다.
시작해 봅시다!
PowerShell 문자열 연결 연산자 사용하기
프로그래밍 언어에는 문자열을 연결하는 데 사용하는 고유한 연결 연산자가 있습니다. 예를 들어, Visual Basic에서 연결 방법은 앰퍼샌드 기호(&
)입니다. PowerShell에도 자체적인 연결 방법이 있으며, 이는 플러스 기호(+
)입니다.
문자열 연결 연산자를 사용하면 아래의 코드를 사용하여 문자열을 연결할 수 있습니다.
PowerShell 문자열 확장 사용
문자열 확장의 사용은 문자열을 연결할 때 가장 짧은 코드를 생성하는 방법일 수 있습니다. 아래 코드에서 보는 것처럼 필요한 것은 문자열을 원하는 대로 정렬하고 이중 인용부호로 둘러싸는 것뿐입니다.
그러면 PowerShell은 이중 인용부호 문자열 내부에서 문자열 확장을 해석하고 처리하여 연결된 문자열을 결과로 출력합니다. 아래의 샘플 출력을 참조할 수 있습니다.

PowerShell 형식 연산자 사용
형식 연산자(-f
)는 주로 복합 형식 지정에 사용됩니다. 이 방법을 사용할 때 중요한 것은 -f
를 사용하는 세 가지 부분이 있다는 것입니다.
아래 코드의 세 번째 줄을 참조하십시오. "{0} {1}"
은 형식과 자리 표시자를 나타냅니다. 중괄호 안의 숫자는 해당 자리에 표시할 컬렉션의 문자열 인덱스를 나타냅니다. 인용부호는 단일 인용부호 또는 이중 인용부호일 수 있습니다.
이 예제에서 입력으로 사용되는 문자열 컬렉션은 $firstname,$lastname
로 나타낼 수 있습니다. 이는 $firstname
변수의 인덱스가 0이고 $lastname
의 인덱스가 1임을 의미합니다.
마침내, -f
는 플레이스홀더와 (-f
)로 표시된 문자열 모음 사이의 위치입니다.
위의 코드는 아래에 표시된 결과를 생성합니다.

PowerShell의 -Join
연산자 사용
-Join
연산자는 두 가지 방법으로 문자열을 하나의 문자열로 결합하는 데 사용할 수 있습니다.
-Join
을 사용하는 첫 번째 방법은 연결하려는 문자열 배열을 뒤따르는 것입니다. -Join
연산자는 구분자를 추가하는 옵션을 제공하지 않습니다. 배열의 모든 문자열이 아무 것도 없이 서로 붙여집니다.
-Join
연산자를 사용하는 두 번째 방법은 사용할 구분자를 지정하는 것입니다. 문자열 배열이 함께 결합되지만 지정된 구분자 문자가 각 문자열 사이에 삽입됩니다.
문자열을 연결하는 목표로 돌아가서, 아래 코드는 문자열을 함께 조립하기 위해 -Join
연산자를 사용하는 방법을 보여줍니다.
PowerShell에서 위의 예제 코드를 실행하면, 아래에 표시된 출력과 유사한 결과를 기대할 수 있습니다.

.NET String.Format()
메서드
.NET String.Format 메서드는 .NET String.Format 메서드로, PowerShell 형식 연산자의 .NET 상응물입니다. 형식과 자리 표시자를 지정해야 하는 형식 연산자와 동일하게 작동합니다.
아래 스크린샷은 String.Format 메서드를 동작하는 모습을 보여줍니다.

.NET String.Concat()
메서드
문자열을 연결하는 또 다른 방법은 .Net String.Concat 메서드를 사용하는 것입니다. .NET String.Concat 메서드는 PowerShell 문자열 연결 연산자(+
)의 .NET 상응물입니다. 그러나 문자열을 결합할 때 + 기호 대신에 메서드 내부에 모든 문자열을 추가할 수 있습니다. 예를 들어 이렇게 사용할 수 있습니다 – [string]::Concat(string1,string2...)
.
아래 스크린샷은 .NET String.Concat 메소드를 호출한 결과를 보여줍니다. PowerShell이 string1, string2를 병합한 것을 볼 수 있습니다.

.NET String.Join()
메소드
.NET String.Join 메소드는 PowerShell Join 연산자 (-join
)의 .NET 메소드 상대입니다. 이 메소드의 형식은 [string]::Join(<구분자>,<문자열1>,<문자열2>,...)
입니다.
-Join
메소드 내의 첫 번째 항목은 항상 구분자입니다. 그런 다음, 이어지는 항목 값은 연결하려는 문자열입니다. 아래의 예제 코드를 참조하십시오. 기억하세요, 첫 번째 항목은 항상 구분자입니다. 구분자를 추가하고 싶지 않은 경우, 이렇게 지정할 수 있습니다 —> ''
.

PowerShell 문자열 분할
이전 섹션에서 문자열을 연결하는 다양한 방법을 보았습니다. 이 섹션에서는 PowerShell을 사용하여 문자열을 분할하는 다양한 방법에 대해 알아보겠습니다. 문자열 분할은 연결의 역동작입니다.
파워쉘에서 문자열을 분할하는 방법은 두 가지가 있습니다 – split()
함수/메서드 또는 split
연산자입니다.
split()
메서드를 사용하여 문자열 분할하기
배열을 생성하기 위해 문자열을 분할하기 위한 간단한 방법을 찾고 있다면, split()
메서드를 사용하면 됩니다. split()
메서드는 모든 문자열 객체에 있으며 정규식이 아닌 문자에 기반하여 문자열을 배열로 분할할 수 있습니다.
예를 들어, ‘green|eggs|and|ham’과 같은 문자열을 ‘green’,’eggs’,’and’,’ham’으로 구성된 배열을 생성하고 싶다면, 다음 코드 스니펫과 같이 이 문자열을 파이프 기호(|
)로 분할할 수 있습니다.
그러면 파워쉘이 원하는대로 문자열을 파이프 기호로 분할한 배열을 표시합니다.
split()
메서드는 문자열을 분할하는 간단한 방법이지만 제한적입니다. split()
메서드는 정규식을 통한 문자열 분할을 허용하지 않습니다. 보다 고급 기능이 필요한 경우에는 split
연산자에 대해 알아야 합니다.
-split
연산자
파워쉘에서 문자열을 분할하는 데 사용할 수 있는 주요 연산자는 -Split
연산자입니다. -Split
연산자를 사용하면 기본적으로 공백을 기준으로 문자열이 분할되거나 특정 구분 문자열을 기준으로 분할됩니다.
아래는 참고용 -Split
연산자 구문입니다. 단항 분할과 이항 분할의 차이에 주의하세요.
이 예제에서 $string
변수는 단일 라인 문자열의 값을 보유하고 있습니다. 그런 다음 -Split
연산자를 사용하여 단일 라인 문자열을 PowerShell 문자열 배열로 분할합니다. 분할된 문자열은 $split
변수에 저장됩니다.
위의 결과에서 볼 수 있듯이, 원래 하나의 문자열이 7개의 하위 문자열로 분할되었습니다. 이는 PowerShell이 문자열을 배열로 분할하는 방법을 보여줍니다.
문자 구분 기호
이전 예제에서 -Split
연산자는 구분 기호를 지정하지 않고도 단일 문자열 객체를 여러 하위 문자열로 분할했습니다. 이는 -Split
연산자의 기본 구분 기호가 공백인 경우입니다. 하지만 구분 기호는 문자, 문자열, 패턴 또는 스크립트 블록일 수도 있습니다.
이 예제에서는 구분 기호로 세미콜론 ;
을 사용합니다.
위의 코드를 PowerShell에서 테스트하면 아래와 같은 결과가 나옵니다.

위의 출력에서는 구분자 문자가 결과 하위 문자열에서 완전히 생략된 것을 알 수 있습니다.
구분자 문자를 보존해야 하는 경우, 구분자 문자를 괄호로 묶어서 보존할 수 있습니다.
위와 같이 분할 구분자를 수정한 후 실행하면 아래와 같은 출력이 나옵니다.

위의 결과에서는 구분자 문자가 생략되지 않고 결과 하위 문자열에 포함됩니다.
문자열 구분자
문자열은 다른 문자열을 구분자로 사용하여 분할할 수도 있습니다. 이 예제에서는 “day” 문자열이 구분자로 사용됩니다.
스크립트 블록 구분자
A scriptBlock as the delimiter enables the -Split operator to perform custom or complex splitting of strings.
이전 예제에서는 구분자 문자 또는 문자열을 사용하여 문자열을 분할했습니다. 스크립트 블록을 사용하면 여러 구분자를 효과적으로 사용하는 표현식을 만들 수 있습니다.
아래의 예제는 표현식 {$PSItem -eq 'e' -or $PSItem -eq 'y'}
을 사용하여 문자열이 'e'
또는 'a'
인 경우에만 분할된다는 것을 의미합니다.
그리고 이 명령을 실행하면 출력은 스크립트 블록에서 지정된 표현식 내에 지정된 구분자 문자로 분할된 하위 문자열이 됩니다.

다음 예제는 스크립트 블록과 함께 조금 더 많은 작업을 수행합니다. 이번에는 표현식이 다음을 평가합니다:
- 들어오는 문자가 정수로 통과되는지; 그리고
- 값이 1보다 큰지
평가 결과가 true인 경우, -Split
연산자는 해당 문자를 구분자로 사용합니다. 또한 오류 처리가 추가되어 오류가 걸러지도록 합니다.
위에 표시된 코드를 실행한 후에는, 문자열이 정수 값으로 캐스트될 수 있는 위치에서 분할될 것으로 예상됩니다. 아래에 예상 출력이 표시됩니다.

정규식 구분자
-Split
연산자는 기본적으로 지정된 구분자와 일치하는 정규식을 사용합니다. 따라서 문자열을 분할하기 위해 정규식도 구분자로 사용할 수 있습니다.
다음 예에서, 문자열에는 단어 문자와 비단어 문자가 포함되어 있습니다. 목표는 비단어 문자로 문자열을 분할하는 것입니다. 정규식에서 비단어 문자는 \W
로 표시되고, 이러한 문자에 해당하는 단어 문자 – [a-zA-Z0-9_]
는 \w
로 표시됩니다.
부분 문자열 제한
또한 -Split
연산자가 문자열을 여러 부분 문자열로 분할하지 못하게 할 수도 있습니다. 부분 문자열 결과를 제한하는 데 사용할 수 있는 옵션은 <Max-substrings>
매개변수입니다.
-Split 구문을 참조하면 <Max-substrings>
매개변수는 <Delimited>
매개변수 다음에 직접 따라오는 매개변수입니다. 아래에 다시 구문을 보여줍니다.
위의 구문을 따라 아래 예제 코드는 분할/부분 문자열의 수를 3으로 제한하도록 수정되었습니다.
그리고 위의 코드를 실행하면 아래 출력이 나타납니다. 아래 출력에서 볼 수 있듯이, 문자열은 세 개의 부분 문자열로만 분할되었습니다. 나머지 구분 기호는 건너뛰었습니다.

이제, 부분 문자열을 제한하고 싶지만, 반대로 하고 싶다면 <Max-substrings>
매개변수 값을 음수로 변경할 수 있습니다. 다음 예에서 <Max-substrings>
은 -3
으로 변경됩니다.
위의 수정된 코드 결과로 인해, 문자열은 마지막 세 개의 일치하는 구분 기호부터 분할되었습니다.

문자열 찾기 및 대체하기
이 섹션에서는 PowerShell 문자열 대체를 검색하고 수행하는 두 가지 방법에 대해 알아보게 됩니다. Replace()
메서드와 -Replace
연산자입니다.
Replace()
메서드
문자열 객체에는 검색 및 대체 작업을 수행하는 데 도움이 되는 내장 메서드인 replace()
메서드도 있습니다. replace()
메서드는 최대 4개의 오버로드를 사용할 수 있습니다.
replace()
메서드에 대한 허용되는 오버로드 세트는 아래에 나와 있습니다.
<original>
과 <substitute>
는 필수 오버로드입니다. <ignoreCase>
와 <culture>
는 선택 사항입니다.
아래 예시에서 코드는 쉼표(,
) 문자의 모든 인스턴스를 세미콜론(;
)으로 교체합니다.
단일 문자만 교체하는 것뿐만 아니라, replace()
메서드를 사용하여 문자열을 검색하고 대체할 수도 있습니다. 아래 예시 코드는 단어 “day”를 “night”로 대체합니다.

replace()
method-Replace
연산자
대체 연산자의 구문은 아래에 표시되어 있습니다.
위의 구문을 사용하여 아래 예시 코드는 -replace
연산자를 사용하여 “day”라는 단어를 “Night”로 대체합니다.

-replace
operator다음 예제는 RegEx 매치를 사용하여 문자열을 -replace
연산자로 대체하는 방법을 보여줍니다. 아래의 코드는 (#.
)와 일치하는 문자열을 nothing으로 대체합니다.

-replace
문자열에서 문자열 추출하기
문자열 객체에는 SubString()
이라는 메서드가 있습니다. SubString()
메서드는 특정 위치에서 문자열 안에 있는 문자열을 추출하는 데 사용됩니다. SubString()
메서드의 구문은 아래에 표시되어 있습니다.
startIndex
은 SubString()
메서드가 검색을 시작할 위치 인덱스입니다. length
매개변수는 startIndex
부터 반환할 문자 수를 나타냅니다. length
매개변수는 선택적이며 사용하지 않으면 SubString()
메서드는 모든 문자를 반환합니다.
시작 위치와 고정 길이에서 서브스트링 추출하기
아래의 예제 코드는 $guid
문자열 값의 일부를 인덱스 9에서 시작하여 바로 뒤에 오는 5개의 문자를 반환합니다.
동적 시작 위치에서 서브스트링 추출하기
다음 예제는 PowerShell 문자열 길이 속성을 사용하여 시작 인덱스를 동적으로 정의하는 방법을 보여줍니다.
아래의 코드는 다음을 수행합니다:
- 문자열 객체의 길이를 가져옵니다.
- 길이를 2로 나누어 중간 인덱스를 가져옵니다.
- 부분 문자열의 시작 인덱스로 중간 인덱스를 사용합니다.
length
값이 지정되지 않았으므로 Substring()
메서드는 시작 인덱스부터 모든 문자를 반환했습니다.

PowerShell 문자열 비교
PowerShell을 사용하여 문자열을 비교할 수도 있으며, 문자열 객체의 내장 메서드인 CompareTo()
, Equals()
, Contains()
메서드를 사용하거나 PowerShell의 비교 연산자를 사용하여 비교할 수 있습니다.
CompareTo()
메서드 사용
CompareTo()
메서드는 두 문자열이 동일한 값을 가지면 0의 값을 반환합니다. 예를 들어, 아래 코드는 두 개의 문자열 객체를 비교합니다.
값이 동일하므로 아래와 같이 결과는 0이어야 합니다.

CompareTo()
method to compare stringsEquals()
메서드와 -eq
사용
Equals()
메서드와 -eq
연산자를 사용하여 두 문자열의 값이 동일한지 확인할 수 있습니다.
아래 예제는 $string1
과 $string2
의 값을 비교하기 위해 Equals()
메서드를 사용합니다.
위의 코드는 $string1
과 $string2
의 값이 서로 다르기 때문에 False
를 반환해야 합니다.

Equals()
method다음 예제 코드는 $string1
과 $string2
의 값을 비교하기 위해 -eq
를 사용합니다.
아래의 결과에서 알 수 있듯이, -eq
와 Equal()
메서드를 사용한 결과는 동일합니다.

-eq
operatorContains()
메서드 사용하기
이 예제에서는 PowerShell 문자열이 다른 문자열의 부분 문자열을 포함하는지 확인하여 두 개의 문자열을 비교합니다.
아래의 코드에서는 $string1
과 $string2
의 값이 같지 않음을 보여줍니다. 그러나 $string2
의 값은 $string1
의 부분 문자열입니다.
위의 코드의 결과는 아래와 같이 True
여야 합니다.

Contains()
method