about_Data_Sections — 데이터 섹션 이해하기
about_Data_Sections — 데이터 섹션 이해하기
data 섹션을 쓰면 텍스트 문자열이나 읽기 전용 데이터를 스크립트 로직에서 분리해서 관리할 수 있어요. 이 문서에서는 그 개념과 사용법을 하나씩 정리해 드릴게요.
본문
PowerShell용으로 작성한 스크립트에는 데이터만 담긴 data 섹션을 하나 이상 넣을 수 있어요. 어떤 스크립트나 함수, 고급 함수에도 data 섹션은 자유롭게 포함할 수 있고, data 섹션의 내용물은 PowerShell 스크립트 언어의 일부 지정된 하위 집합으로 제한된답니다.
데이터를 코드 로직에서 분리해 두면 로직과 데이터를 각각 더 쉽게 파악하고 관리할 수 있어요. 예를 들어 오류 메시지나 도움말 문자열 같은 텍스트 원본을 별도의 문자열 리소스 파일로 둘 수 있고, 코드 로직이 분리되어 있으니 보안 검사나 검증 테스트도 훨씬 수월해지죠.
PowerShell에서는 data 섹션으로 스크립트 국제화(i18n)를 지원할 수 있어요. 다른 언어로 번역할 수 있는 문자열을 분리하고 찾고 처리하기 쉽게 만들 때 data 섹션이 큰 도움이 된답니다.
data 섹션은 PowerShell 2.0 기능에서 처음 추가되었어요.
문법
data 섹션의 문법은 다음과 같아요.
data [<변수명>] [-SupportedCommand <cmdlet-이름>] {
<허용된-내용>
}
data 키워드는 필수이며 대소문자를 구분하지 않아요. 허용되는 내용은 다음 요소들로 제한됩니다.
-match를 제외한 모든 PowerShell 연산자if,else,elseif문- 다음 자동 변수:
$PSCulture,$PSUICulture,$true,$false,$null - 주석
- 파이프라인
- 세미콜론(
;)으로 구분한 문들 - 다음과 같은 리터럴:
a
1
1,2,3
"PowerShell 2.0"
@( "red", "green", "blue" )
@{ a = 0x1; b = "great"; c ="script" }
@'
Hello, World
'@
- 기본적으로
data섹션에 허용되는 cmdlet. 기본적으로는ConvertFrom-StringDatacmdlet만 허용돼요. -SupportedCommand매개 변수를 이용해서data섹션에 허용한 cmdlet.
data 섹션 안에서 ConvertFrom-StringData cmdlet을 쓸 때는 키-값 쌍을 작은따옴표나 큰따옴표 문자열, 또는 작은따옴표나 큰따옴표 here-string으로 감쌀 수 있어요. 다만 변수나 하위 식을 포함하는 문자열은 반드시 작은따옴표 문자열이나 작은따옴표 here-string으로 감싸야 해요. 그래야 변수가 확장되지 않고 하위 식이 실행되지 않으니까요.
-SupportedCommand
SupportedCommand 매개 변수는 지정한 cmdlet이나 함수가 데이터만 생성한다고 표시할 때 사용해요. 사용자가 직접 작성하거나 테스트해 둔 cmdlet과 함수를 data 섹션에 포함할 수 있도록 설계된 기능이랍니다.
SupportedCommand 값은 하나 이상의 cmdlet 또는 함수 이름을 쉼표로 구분한 목록이에요.
예를 들어 다음 data 섹션에는 직접 작성한 cmdlet이 포함되어 있어요.
data -SupportedCommand Format-Xml {
Format-Xml -Strings string1, string2, string3
}
data 섹션 사용하기
data 섹션의 내용을 쓰려면 그 값을 변수에 할당하고, 변수 표기법으로 내용에 접근하면 돼요.
예를 들어 다음 data 섹션에는 here-string을 해시 테이블로 변환하는 ConvertFrom-StringData 명령이 들어 있어요. 변환된 해시 테이블은 $TextMsgs 변수에 할당된답니다.
$TextMsgs 변수는 data 섹션의 일부가 아니에요.
$TextMsgs = data {
ConvertFrom-StringData -StringData @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}
$TextMsgs 안의 해시 테이블 키와 값을 접근하려면 다음 명령을 사용하세요.
$TextMsgs.Text001
$TextMsgs.Text002
또는 변수 이름을 data 섹션 정의에 넣을 수도 있어요. 예를 들면 다음과 같아요.
data TextMsgs {
ConvertFrom-StringData -StringData @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}
$TextMsgs
결과는 이전 예제와 동일해요.
Name Value
---- -----
Text001 Windows 7
Text002 Windows Server 2008 R2
예제
단순한 데이터 문자열이에요.
data {
"Thank you for using my PowerShell Organize.pst script."
"It is provided free of charge to the community."
"I appreciate your comments and feedback."
}
허용된 변수를 포함하는 문자열이에요.
data {
if ($null) {
"To get help for this cmdlet, type Get-Help New-Dictionary."
}
}
ConvertFrom-StringData cmdlet을 사용하는 작은따옴표 here-string이에요.
data {
ConvertFrom-StringData -StringData @'
Text001 = Windows 7
Text002 = Windows Server 2008 R2
'@
}
ConvertFrom-StringData cmdlet을 사용하는 큰따옴표 here-string이에요.
data {
ConvertFrom-StringData -StringData @"
Msg1 = To start, press any key.
Msg2 = To exit, type "quit".
"@
}
데이터를 생성하는 직접 작성한 cmdlet을 포함하는 data 섹션이에요.
data -SupportedCommand Format-Xml {
Format-Xml -Strings string1, string2, string3
}