편집 참고 사항
중요합니다
Windows PowerShell 언어 사양 3.0 2012년 12월에 게시되었으며 Windows PowerShell 3.0을 기반으로 했습니다. 이 사양은 PowerShell의 현재 상태를 반영하지 않습니다. 현재 상태를 반영하도록 이 설명서를 업데이트할 계획은 없습니다. 이 설명서는 기록 참조를 위해 여기에 제공됩니다.
사양 문서는 Microsoft 다운로드 센터 Microsoft Word 문서로 사용할 수 있습니다. https://www.microsoft.com/download/details.aspx?id=36389 Word 문서가 Microsoft Learn에서 프레젠테이션용으로 변환되었습니다. 변환하는 동안 Docs 플랫폼의 서식을 수용하기 위해 일부 편집 변경이 이루어졌습니다. 일부 오타 및 사소한 오류가 수정되었습니다.
형식 변환 다른 형식이 필요한 컨텍스트에서 한 형식의 값을 사용할 때 수행됩니다. 이러한 변환이 자동으로 발생하면 암시적 변환으로 알려져 있습니다. 이 예제의 일반적인 예는 피연산자가 지정한 값 중 하나 이상을 변환해야 하는 일부 연산자를 사용하는 것입니다. 변환될 때 숫자의 정밀도 손실 없이 원본 값의 감각이 유지되는 경우 암시적 변환이 허용됩니다.
캐스트 연산자(§7.2.9)를 사용하면 명시적 변환을허용합니다.
변환은 아래에서 설명하며, §6.19각 연산자의 설명에 필요에 따라 추가 정보가 제공됩니다.
값을 이미 있는 형식으로 명시적으로 변환하면 해당 값이나 해당 표현이 변경되지 않습니다.
식의 값이 매개 변수에 바인딩되는 경우 변환을 전달하는 규칙은 §6.17적용됩니다.
6.1 void로 변환
모든 형식의 값은 void 형식으로 캐스팅하여 명시적으로 삭제할 수 있습니다. 결과가 없습니다.
6.2 부울로 변환
모든 값을 부울 형식으로 변환하는 규칙은 다음과 같습니다.
- 숫자 또는 문자 값이 0이면 False로 변환됩니다. 0이 아닌 숫자 또는 문자 값이 True로 변환됩니다.
- null 형식의 값이 False로 변환됩니다.
- 길이가 0인 문자열은 False로 변환됩니다. 길이 > 0의 문자열이 True로 변환됩니다.
-
[switch]값$true이 있는 매개 변수는 True로 변환되고 값$false이 있는 매개 변수는 False로 변환됩니다. - Null이 아닌 다른 모든 참조 형식 값은 True로 변환됩니다.
형식이 IList를 구현하는 경우:
- 개체의 Length > 2이면 값이 True로 변환됩니다.
- 개체의 Length가 1이고 첫 번째 요소가 자체 IList가 아닌 경우 해당 요소의 값이 true이면 값이 True로 변환됩니다.
- 그렇지 않으면 첫 번째 요소의 Count >= 1이면 값이 True로 변환됩니다.
- 그렇지 않으면 값이 False로 변환됩니다.
6.3 char로 변환
모든 값을 문자 형식으로 변환하는 규칙은 다음과 같습니다.
- 부울, 10진수, 부동 소수점 또는 double 형식의 값 변환이 잘못되었습니다.
- null 형식의 값은 null(U+0000) 문자로 변환됩니다.
- 문자 형식으로 값을 나타낼 수 있는 정수 형식 값에는 해당 값이 있습니다. 그렇지 않으면 변환 오류가 발생합니다.
- 길이가 1이 아닌 문자열 값의 변환은 오류입니다.
- 길이가 1인 문자열 값은 해당 문자 값이 있는 문자로 변환됩니다.
- 대상 형식에서 소수 부분의 반올림 후 값을 나타낼 수 있는 숫자 형식 값은 반올림된 값입니다. 그렇지 않으면 변환 오류가 발생합니다.
- 다른 참조 형식 값의 경우 참조 형식이 이러한 변환을 지원하는 경우 해당 변환이 사용됩니다. 그렇지 않으면 변환 오류가 발생합니다.
6.4 정수로 변환
모든 값을 바이트, int 또는 long 형식으로 변환하는 규칙은 다음과 같습니다.
- bool 값 False는 0으로 변환됩니다. 부울 값 True가 1로 변환됩니다.
- 대상 형식에서 값을 나타낼 수 있는 char 형식 값에는 해당 값이 있습니다. 그렇지 않으면 변환 오류가 발생합니다.
- 대상 형식에서 소수 부분의 반올림 후 값을 나타낼 수 있는 숫자 형식 값은 반올림된 값입니다. 그렇지 않으면 변환 오류가 발생합니다.
- null 형식의 값이 0으로 변환됩니다.
- 숫자를 나타내는 문자열은 §6.16설명된 대로 변환됩니다. 소수 부분의 잘림 후 결과를 대상 형식으로 나타낼 수 있는 경우 문자열이 잘 형성되고 대상 형식이 있습니다. 그렇지 않으면 변환 오류가 발생합니다. 문자열이 숫자를 나타내지 않으면 변환에 오류가 발생합니다.
- 다른 참조 형식 값의 경우 참조 형식이 이러한 변환을 지원하는 경우 해당 변환이 사용됩니다. 그렇지 않으면 변환 오류가 발생합니다.
6.5 부동 및 이중으로 변환
모든 값을 float 또는 double 형식으로 변환하는 규칙은 다음과 같습니다.
- bool 값 False는 0으로 변환됩니다. 부울 값 True가 1로 변환됩니다.
- 문자 값이 정확하게 표시됩니다.
- 숫자 형식 값은 가능한 경우 정확하게 표시됩니다. 그러나 부동 소수점으로의 int, long 및 decimal 변환의 경우 및 double로의 길고 10진수 변환의 경우 정수 값의 가장 중요한 비트 중 일부가 손실될 수 있습니다.
- null 형식의 값이 0으로 변환됩니다.
- 숫자를 나타내는 문자열은 §6.16;에 설명된 대로 변환됩니다. 그렇지 않으면 변환 오류가 발생합니다.
- 다른 참조 형식 값의 경우 참조 형식이 이러한 변환을 지원하는 경우 해당 변환이 사용됩니다. 그렇지 않으면 변환 오류가 발생합니다.
6.6 소수로 변환
모든 값을 10진수 형식으로 변환하는 규칙은 다음과 같습니다.
- bool 값 False는 0으로 변환됩니다. 부울 값 True가 1로 변환됩니다.
- 문자 형식 값이 정확하게 표시됩니다.
- 숫자 형식 값은 정확하게 표시됩니다. 그러나 해당 값이 너무 크거나 너무 작아 대상 형식에 맞지 않으면 변환이 잘못됩니다.
- null 형식의 값이 0으로 변환됩니다.
- 숫자를 나타내는 문자열은 §6.16;에 설명된 대로 변환됩니다. 그렇지 않으면 변환 오류가 발생합니다.
- 다른 참조 형식 값의 경우 참조 형식이 이러한 변환을 지원하는 경우 해당 변환이 사용됩니다. 그렇지 않으면 변환 오류가 발생합니다.
- 성공적인 변환의 결과로 인해 소수 부분에 후행 0이 없는 경우 그 값의 범위가 결정됩니다.
6.7 개체로 변환
null 형식(4.1.2)을 제외한 모든 형식의 값을 형식 개체로 변환할 수 있습니다. 값은 해당 형식과 표현을 유지합니다.
6.8 문자열로 변환
모든 값을 형식 문자열로 변환하는 규칙은 다음과 같습니다.
-
$false부울 값은 "False"로 변환됩니다.$true부울 값이 "True"로 변환됩니다. - char 형식 값은 해당 char를 포함하는 1자 문자열로 변환됩니다.
- 숫자 형식 값은 해당 숫자 리터럴 형식의 문자열로 변환됩니다. 그러나 결과에 선행 또는 후행 공백이 없고, 선행 더하기 기호가 없고, 정수에 base 10이 있고, 형식 접미사가 없습니다. 10진수 변환의 경우 스케일이 유지됩니다. -∞, +∞ 및 NaN 값의 경우 결과 문자열은 각각 "-Infinity", "Infinity" 및 "NaN"입니다.
- null 형식의 값은 빈 문자열로 변환됩니다.
- 1차원 배열의 경우 결과는 시작부터 끝까지 해당 배열에 있는 각 요소의 값을 포함하는 문자열이며, 요소는 현재 출력 필드 구분 기호(§2.3.2.2)로 구분됩니다. 자체 배열인 요소가 있는 배열의 경우 최상위 요소만 변환됩니다. 배열인 요소의 값을 나타내는 데 사용되는 문자열은 구현이 정의됩니다. 다차원 배열의 경우 평면화(§9.12)한 다음 1차원 배열로 처리됩니다.
- null 형식의 값은 빈 문자열로 변환됩니다.
- scriptblock 형식 값은 구분 { 및 } 문자 없이 해당 블록의 텍스트를 포함하는 문자열로 변환됩니다.
- 열거형 형식 값의 경우 결과는 해당 값으로 인코딩된 각 열거형 상수의 이름을 쉼표로 구분하여 포함하는 문자열입니다.
- 다른 참조 형식 값의 경우 참조 형식이 이러한 변환을 지원하는 경우 해당 변환이 사용됩니다. 그렇지 않으면 변환 오류가 발생합니다.
배열인 요소의 값을 나타내는 데 사용되는 문자열에는 System.Type[], System.Type[,]등의 형식이 있습니다. 다른 참조 형식의 경우 메서드 ToString 호출됩니다. 다른 열거 가능한 형식의 경우 소스 값은 1차원 배열처럼 처리됩니다.
6.9 배열로 변환
모든 값을 배열 형식으로 변환하는 규칙은 다음과 같습니다.
- 대상 형식은 다차원 배열이 아닐 수 있습니다.
- null 형식의 값은 그대로 유지됩니다.
-
$null또는 해시 테이블 형식의 값 이외의 스칼라 값의 경우 대상 요소 형식으로 변환한 후 해당 값이 스칼라인 새 1개 요소 배열이 만들어집니다. - 1차원 배열 값의 경우 대상 형식의 새 배열이 만들어지고 각 요소가 원본 배열에서 대상 배열의 해당 요소로 변환되어 복사됩니다.
- 다차원 배열 값의 경우 해당 배열이 먼저 평면화되고(§9.12) 1차원 배열 값으로 처리됩니다.
- 문자열 값은 배열의 해당 위치를 차지하는 문자열의 연속 문자와 길이가 같은 char 배열로 변환됩니다.
다른 열거 가능한 형식의 경우 해당 변환이 있는 경우 대상 요소 형식으로 변환한 후 값이 해당 요소인 새 1개 요소 배열이 만들어집니다. 그렇지 않으면 변환 오류가 발생합니다.
6.10 xml로 변환
개체가 형식 문자열로 변환된 다음 xml형식의 XML Document 개체로 변환됩니다.
6.11 regex로 변환
문자열 형식의 값을 지정하는 식은 regex형식으로 변환될 수 있습니다.
6.12 scriptblock으로 변환
모든 값을 형식 scriptblock 변환하는 규칙은 다음과 같습니다.
- 문자열 값은 해당 명령에 대한 호출에 대한 인수에 의해 선택적으로 다음 명령의 이름으로 처리됩니다.
6.13 열거형 형식으로 변환
모든 값을 열거형 형식으로 변환하는 규칙은 다음과 같습니다.
- 열거형 형식에 대한 명명된 값(대/소문자)중 하나를 포함하는 형식 문자열의 값이 해당 명명된 값으로 변환됩니다.
- 열거형 형식에 대한 명명된 값의 쉼표로 구분된 목록(대/소문자)이 포함된 형식 문자열의 값은 명명된 모든 값의 비트 OR로 변환됩니다.
6.14 다른 참조 형식으로 변환
모든 값을 배열 형식이나 문자열이 아닌 참조 형식으로 변환하는 규칙은 다음과 같습니다.
- null 형식의 값은 그대로 유지됩니다.
- 그렇지 않으면 동작이 구현에 따라 정의됩니다.
여기에서는 여러 기계가 영향을 미칩니다. 여기에는 값이 해시 테이블인 경우 단일 인수 생성자 또는 기본 생성자를 사용할 수 있는 것, 암시적 및 명시적 변환 연산자, 대상 형식에 대한 Parse 메서드, Convert.ConvertTo의 사용, 그리고 ETS 변환 메커니즘이 포함됩니다.
6.15 일반적인 산술 변환
두 피연산자 모두 숫자 형식의 값을 지정하지 않으면
- 왼쪽 피연산자가 불리언 형식의 값을 지정하면 변환에 오류가 발생합니다.
- 그렇지 않으면
$null값을 지정하는 모든 피연산자는 int 형식의 0으로 변환되고 프로세스는 아래에 나열된 숫자 변환으로 계속됩니다. - 그렇지 않은 경우 왼쪽 피연산자는 문자 형식의 값을 지정하고 오른쪽 피연산자는 부울 형식의 값을 지정하는 경우 변환은 오류가 발생합니다.
- 그렇지 않은 경우 왼쪽 피연산자는 문자열 형식의 값을 지정하지만 숫자(§6.16)를 나타내지 않으면 변환이 오류로 발생합니다.
- 그렇지 않은 경우 오른쪽 피연산자는 문자열 형식의 값을 지정하지만 숫자(§6.16)를 나타내지 않으면 변환이 잘못됩니다.
- 그렇지 않으면 문자열 형식의 값을 지정하는 모든 피연산자는 숫자(§6.16)로 변환되고 프로세스는 아래 나열된 숫자 변환으로 계속됩니다.
- 그렇지 않으면 변환 오류가 발생합니다.
숫자 변환:
- 한 피연산자가 10진수 형식의 값을 지정하는 경우 필요한 경우 다른 피연산자가 지정한 값이 해당 형식으로 변환됩니다. 결과에는 10진수 형식이 있습니다.
- 그렇지 않으면 한 피연산자에서 double 형식의 값을 지정하는 경우 필요한 경우 다른 피연산자에서 지정한 값이 해당 형식으로 변환됩니다. 결과의 형식은 double입니다.
- 그렇지 않으면 한 피연산자에서 float 형식의 값을 지정하는 경우 필요한 경우 두 피연산자에서 지정한 값이 double 형식으로 변환됩니다. 결과의 형식은 double입니다.
- 그렇지 않으면 한 피연산자에서 long 형식의 값을 지정하는 경우 필요한 경우 다른 피연산자 값으로 지정된 값이 해당 형식으로 변환됩니다. 결과에는 해당 값을 나타낼 수 있는 시퀀스에서 가장 먼저 등장하는 형식인 long 또는 double 형식이 있습니다.
- 그렇지 않으면 필요한 경우 두 피연산자에서 지정한 값이 int 형식으로 변환됩니다. 결과에는 잘림 없이 값을 나타낼 수 있는 시퀀스 int, long, double의 첫 번째 값이 있습니다.
6.16 문자열에서 숫자 형식으로 변환
내용에 따라 문자열을 명시적으로 또는 암시적으로 숫자 값으로 변환할 수 있습니다. 특히
- 빈 문자열이 값 0으로 변환됩니다.
- 선행 및 후행 공백은 무시됩니다. 그러나 문자열은 공백으로만 구성되지 않을 수 있습니다.
- 공백 및/또는 줄 종결자만 포함하는 문자열은 값 0으로 변환됩니다.
- 하나의 선행 + 또는 - 기호가 허용됩니다.
- 정수 번호에는 16진수 접두사(0x 또는 0X)가 있을 수 있습니다.
- 선택적으로 부호가 있는 지수가 허용됩니다.
- 형식 접미사와 승수는 허용되지 않습니다.
- 대/소문자 구분 문자열 "-Infinity", "Infinity" 및 "NaN"은 각각 -∞, +∞ 및 NaN 값으로 인식됩니다.
6.17 매개 변수 바인딩 중 변환
매개 변수 바인딩에 대한 자세한 내용은 §8.14참조하세요.
식 값이 매개 변수에 바인딩되는 경우 아래에 설명된 대로 추가 변환 고려 사항이 있습니다.
- 매개 변수 형식이 switch(§4.2.5, §8.10.5)이고 매개 변수에 인수가 없으면 호출된 명령의 매개 변수 값이
$true설정됩니다. 매개 변수 형식이 switch 이외의 경우 인수가 없는 매개 변수는 오류가 발생합니다. - 매개 변수 형식이 switch이고 인수 값이
$null경우 매개 변수 값은$false. - 매개 변수 형식이 개체이거나 인수 형식과 같으면 인수 값이 변환 없이 전달됩니다.
- 매개 변수 형식이 개체 또는 scriptblock이 아니면 scriptblock 형식이 있는 인수가 평가되고 그 결과가 인수의 값으로 전달됩니다. (이를 지연된 스크립트 블록 바인딩이라고 합니다.) 매개 변수 형식이 개체 또는 scriptblock이면 scriptblock 형식이 있는 인수가 있는 그대로 전달됩니다.
- 매개 변수 형식이 T2 형식의 컬렉션이고 인수가 T1 형식의 스칼라인 경우 해당 스칼라는 하나의 요소가 포함된 T2 형식의 컬렉션으로 변환됩니다. 필요한 경우 스칼라 값은 이 섹션의 변환 규칙을 사용하여 T2 형식으로 변환됩니다.
- 매개 변수 형식이 개체가 아닌 스칼라 형식이고 인수가 컬렉션인 경우 인수는 오류가 발생합니다.
- 예상 매개 변수 형식이 T2 형식의 컬렉션이고 인수가 T1 형식의 컬렉션인 경우 인수는 인수 컬렉션과 길이가 같은 T2 형식의 컬렉션으로 변환됩니다. 필요한 경우 인수 컬렉션 요소 값은 이 섹션의 변환 규칙을 사용하여 T2 형식으로 변환됩니다.
- 위의 단계와 이 장 앞부분에서 지정한 변환으로 충분하지 않으면 §6.18 규칙이 적용됩니다. 이러한 작업이 실패하면 매개 변수 바인딩이 실패합니다.
6.18 .NET 변환
암시적 변환의 경우 PowerShell의 기본 제공 변환이 먼저 시도됩니다. 변환을 해결할 수 없는 경우 아래의 .NET 사용자 지정 변환기가 순서대로 위에서 아래로 시도됩니다. 변환을 찾았지만, 변환 과정에서 예외가 발생하면 변환이 실패한 것입니다.
PSTypeConverter: PSTypeConverter 클래스의 구현을 대상 클래스와 연결하는 두 가지 방법이 있습니다. 형식 구성 파일(types.ps1xml)을 통해 또는 대상 클래스에
System.ComponentModel.TypeConverterAttribute특성을 적용합니다. 자세한 내용은 PowerShell SDK 설명서를 참조하세요.TypeConverter: 이 CLR 형식은 표준 값 및 하위 속성에 액세스할 뿐만 아니라 값 형식을 다른 형식으로 변환하는 통합된 방법을 제공합니다. 가장 일반적인 변환기 유형은 텍스트 표현과 변환되는 변환기입니다. 클래스의 형식 변환기는
System.ComponentModel.TypeConverterAttribute사용하여 클래스에 바인딩됩니다. 이 특성을 재정의하지 않는 한 이 클래스에서 상속되는 모든 클래스는 기본 클래스와 동일한 형식 변환기를 사용합니다. 자세한 내용은 PowerShell SDK 및 Microsoft .NET 프레임워크 설명서를 참조하세요.구문 분석 메서드: 원본 형식이 문자열이고 대상 형식에
Parse메서드가 있는 경우 변환을 수행하기 위해 해당 메서드가 호출됩니다.생성자: 대상 형식에 원본 형식의 형식인 단일 인수를 사용하는 생성자가 있는 경우 해당 생성자가 호출되어 변환을 수행합니다.
암시적 캐스트 연산자: 원본 형식에 대상 형식으로 변환하는 암시적 캐스트 연산자가 있는 경우 변환을 수행하기 위해 해당 연산자가 호출됩니다.
명시적 캐스트 연산자: 원본 형식에 대상 형식으로 변환하는 명시적 캐스트 연산자가 있는 경우 해당 연산자가 호출되어 변환을 수행합니다. 대상 형식에 원본 형식에서 변환하는 명시적 캐스트 연산자가 있는 경우 해당 연산자가 호출되어 변환을 수행합니다.
IConvertable: 변환을 수행하기 위해
System.Convert.ChangeType호출됩니다.
6.19 주문된 대로 변환
순서가 지정된 의사 형식으로 값을 변환하는 규칙은 다음과 같습니다.
- 값이 해시 리터럴(§2.3.5.6)인 경우 결과는 해시 테이블처럼 동작하는 구현 정의 형식의 개체이며 키 순서는 해시 리터럴에 지정된 순서와 일치합니다.
- 그렇지 않으면 동작이 구현에 따라 정의됩니다.
해시 리터럴(§2.3.5.6)만 순서대로 변환할 수 있습니다. 결과는 "System.Collections.Specialized.OrderedDictionary"의 인스턴스입니다.
6.20 pscustomobject로 변환
모든 값을 가상 유형 *pscustomobject*로 변환하는 규칙은 다음과 같습니다.
- 해시 테이블 형식의 값이 PowerShell 개체로 변환됩니다. 해시 테이블의 각 키는 해당 값을 가진 NoteProperty가 됩니다.
- 그렇지 않으면 동작이 구현에 따라 정의됩니다.
변환은 항상 허용되지만 값의 형식은 변경되지 않습니다.
PowerShell