ConvertFrom-String
문자열 콘텐츠에서 구조적 속성을 추출하고 구문 분석합니다.
구문
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
Description
cmdlet은 ConvertFrom-String
문자열 콘텐츠에서 구조적 속성을 추출하고 구문 분석합니다. 이 cmdlet은 기존 텍스트 스트림에서 텍스트를 구문 분석하여 개체를 생성합니다. 파이프라인의 각 문자열에 대해 cmdlet은 구분 기호 또는 구문 분석 식을 통해 입력을 분할한 다음 결과 분할 요소 각각에 속성 이름을 할당합니다. 이러한 속성 이름을 제공할 수 있습니다. 그렇지 않으면 자동으로 생성됩니다.
cmdlet의 기본 매개 변수 집합인 ByDelimiter는 정규식 구분 기호에서 정확하게 분할됩니다. cmdlet처럼 따옴표 일치 또는 구분 기호 이스케이프를 Import-Csv
수행하지 않습니다.
cmdlet의 대체 매개 변수 집합인 TemplateParsing은 정규식으로 캡처된 그룹에서 요소를 생성합니다. 정규식에 대한 자세한 내용은 about_Regular_Expressions 참조하세요.
이 cmdlet은 기본으로 구분된 구문 분석과 자동으로 생성된 예제 기반 구문 분석의 두 가지 모드를 지원합니다.
기본적으로 구분된 구문 분석에서는 입력을 공백으로 분할하고 결과 그룹에 속성 이름을 할당합니다.
결과를 cmdlet 중 하나로 파이핑 ConvertFrom-String
하여 구분 기호를 Format-*
사용자 지정하거나 구분 기호 매개 변수를 사용할 수 있습니다.
또한 이 cmdlet은 Microsoft Research의 연구 작업인 FlashExtract를 기반으로 자동으로 생성된 예제 기반 구문 분석을 지원합니다.
예제
예제 1: 기본 속성 이름을 사용하여 개체 생성
"Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
이 명령은 기본 속성 이름 P1 및 P2를 사용하여 개체를 생성합니다.
예제 1A: 생성된 개체 알아보기
이 명령은 속성 P1, P2를 사용하여 하나의 개체를 생성합니다. 두 속성 모두 기본적으로 문자열 형식입니다.
"Hello World" | ConvertFrom-String | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
P1 NoteProperty string P1=Hello
P2 NoteProperty string P2=World
예제 2: 구분 기호를 사용하여 기본 속성 이름을 가진 개체 생성
이 명령은 백슬래시(\
)를 구분 기호로 사용하여 도메인 및 사용자 이름을 가진 개체를 생성합니다. 정규식을 사용할 때 백슬래시 문자를 다른 백슬래시로 이스케이프해야 합니다.
"Contoso\Administrator" | ConvertFrom-String -Delimiter "\\"
P1 P2
-- --
Contoso Administrator
예제 3: 두 개의 명명된 속성을 포함하는 개체 생성
다음 예제에서는 Windows 호스트 파일 항목에서 개체를 만듭니다.
$content = Get-Content C:\Windows\System32\drivers\etc\hosts
$content = $content -match "^[^#]"
$content | ConvertFrom-String -PropertyNames IP, Server
IP Server
-- ------
192.168.7.10 W2012R2
192.168.7.20 W2016
192.168.7.101 WIN8
192.168.7.102 WIN10
cmdlet은 Get-Content
Windows 호스트 파일 $content
의 콘텐츠를 저장합니다. 두 번째 명령은 (#
)로 시작하지 않는 줄과 일치하는 정규식을 사용하여 호스트 파일의 시작 부분에 있는 주석을 제거합니다. 마지막 명령은 나머지 텍스트를 서버 및 IP 속성을 사용하여 개체로 변환합니다.
예제 4: TemplateContent 매개 변수의 값으로 식을 사용하고 결과를 변수에 저장합니다.
이 명령은 TemplateContent 매개 변수의 값으로 식을 사용합니다. 식은 간단히 하기 위해 변수에 저장됩니다. 이제 Windows PowerShell은 파이프라인 ConvertFrom-String
에서 사용되는 문자열에 다음 세 가지 속성이 있음을 이해합니다.
- 이름
- 전화
- age
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
입력의 각 줄은 샘플 일치 항목에 의해 평가됩니다. 줄이 패턴에 지정된 예제와 일치하면 값이 추출되어 출력 변수에 전달됩니다.
샘플 데이터는 $template
다음과 같은 두 가지 전화 형식을 제공합니다.
425-123-6789
(206) 987-4321
또한 샘플 데이터는 다음과 같은 두 가지 연령 형식을 제공합니다.
6
12
하이픈이 없기 때문에 해당 패턴과 일치하는 샘플 데이터가 없기 때문에 이와 같은 (206) 987 4321
휴대폰은 인식되지 않습니다.
예제 5: 생성된 속성에 데이터 형식 지정
위의 예제 4와 동일한 예제입니다. 차이점은 패턴 문자열에 원하는 각 속성에 대한 데이터 형식이 포함되어 있다는 것입니다.
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$PersonalData = $testText | ConvertFrom-String -TemplateContent $template
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
$PersonalData | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
age NoteProperty int age=6
Name NoteProperty string Name=Phoebe Cat
phone NoteProperty string phone=425-123-6789
이 Get-Member
cmdlet은 age 속성이 정수임을 표시하는 데 사용됩니다.
매개 변수
-Delimiter
요소 간의 경계를 식별하는 정규식을 지정합니다. 분할에 의해 만들어진 요소는 결과 개체의 속성이 됩니다. 구분 기호는 궁극적으로 형식[System.Text.RegularExpressions.RegularExpression]
의 Split 메서드를 호출하는 데 사용됩니다.
형식: | String |
별칭: | DEL |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-IncludeExtent
이 cmdlet에는 기본적으로 제거되는 익스텐트 텍스트 속성이 포함되어 있음을 나타냅니다.
형식: | SwitchParameter |
별칭: | IE |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-InputObject
파이프라인에서 받은 문자열 또는 문자열 개체를 포함하는 변수를 지정합니다.
형식: | String |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-PropertyNames
결과 개체에서 분할 값을 할당할 속성 이름의 배열을 지정합니다. 분할하거나 구문 분석하는 모든 텍스트 줄은 속성 값을 나타내는 요소를 생성합니다. 요소가 캡처 그룹의 결과이고 해당 캡처 그룹의 이름이 지정된 경우(예: (?<name>)
) (?'name')
해당 캡처 그룹의 이름이 속성에 할당됩니다.
PropertyName 배열에 요소를 제공하는 경우 해당 이름은 아직 이름이 지정되지 않은 속성에 할당됩니다.
필드보다 더 많은 속성 이름을 제공하는 경우 PowerShell은 추가 속성 이름을 무시합니다. 모든 필드의 이름을 지정하기에 충분한 속성 이름을 지정하지 않으면 PowerShell은 이름이 지정되지 않은 속성(P1, P2 등)에 숫자 속성 이름을 자동으로 할당합니다.
형식: | String[] |
별칭: | PN |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-TemplateContent
이 cmdlet이 문자열을 할당하는 속성을 설명하는 식 또는 변수로 저장된 식을 지정합니다. 템플릿 필드 사양의 구문은 다음과 같습니다 {[optional-typecast]<name>:<example-value>}
.
형식: | String[] |
별칭: | TC |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-TemplateFile
원하는 문자열 구문 분석용 템플릿을 포함하는 파일을 배열로 지정합니다. 템플릿 파일에서 속성 및 해당 값은 아래와 같이 대괄호로 묶입니다. Name 속성 및 연결된 다른 속성과 같은 속성이 여러 번 나타나는 경우 별표(*
)를 추가하여 여러 레코드가 발생함을 나타낼 수 있습니다. 이렇게 하면 여러 속성을 단일 레코드로 추출할 수 없습니다.
{Name*:D avid Chew} {City:Redmond}, {State:WA} {Name*:Evan Narvaez} {Name*:Antonio Moreno} {City:Issaquah}, {State:WA}
형식: | String[] |
별칭: | TF |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-UpdateTemplate
이 cmdlet은 학습 알고리즘의 결과를 템플릿 파일의 주석에 저장한다는 것을 나타냅니다. 이렇게 하면 알고리즘 학습 프로세스가 더 빨라집니다. 이 매개 변수를 사용하려면 TemplateFile 매개 변수를 사용하여 템플릿 파일도 지정해야 합니다.
형식: | SwitchParameter |
별칭: | UT |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
출력
참고
Windows PowerShell에는 다음 별칭이 포함됩니다.ConvertFrom-String
CFS
관련 링크
PowerShell