Set-StrictMode
식, 스크립트 및 스크립트 블록에서 코딩 규칙을 설정하고 적용합니다.
구문
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
Set-StrictMode
cmdlet은 현재 범위 및 모든 자식 범위에 대해 strict 모드를 구성하고 켜고 끕니다. strict 모드가 설정되면 식, 스크립트 또는 스크립트 블록의 내용이 기본 모범 사례 코딩 규칙을 위반할 때 PowerShell에서 종료 오류를 생성합니다.
Version 매개 변수를 사용하여 적용되는 코딩 규칙을 결정합니다.
Set-PSDebug -Strict
cmdlet은 전역 범위에 대해 strict 모드를 설정합니다.
Set-StrictMode
현재 범위 및 해당 자식 범위에만 영향을 줍니다. 따라서 스크립트 또는 함수에서 이를 사용하여 전역 범위에서 상속된 설정을 재정의할 수 있습니다.
Set-StrictMode
해제되면 PowerShell에는 다음과 같은 동작이 있습니다.
- 초기화되지 않은 변수는 형식에 따라 0 또는
$Null
값으로 간주됩니다. - 존재하지 않는 속성에 대한 참조는
$Null
반환합니다. - 잘못된 함수 구문의 결과는 오류 조건에 따라 다릅니다.
- 배열에서 잘못된 인덱스로 값을 검색하려고 시도하면
$Null
예제
예제 1: strict 모드를 버전 1.0으로 설정
# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
The variable $a cannot be retrieved because it has not been set yet.
At line:1 char:3
+ $a <<<< -gt 5
+ CategoryInfo : InvalidOperation: (a:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
strict 모드가 버전 1.0으로 설정된 경우 초기화되지 않은 변수를 참조하려고 시도하면 실패합니다.
예제 2: strict 모드를 버전 2.0으로 설정
# Strict mode is off by default.
function add ($a, $b) {
'$a = ' + $a
'$b = ' + $b
'$a+$b = ' + ($a + $b)
}
add 3 4
$a = 3
$b = 4
$a+$b = 7
add(3,4)
$a = 3 4
$b =
$a+$b = 3 4
Set-StrictMode -Version 2.0
add(3,4)
The function or command was called like a method. Parameters should be separated by spaces,
as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : StrictModeFunctionCallWithParens
Set-StrictMode -Off
$string = "This is a string."
$string.Month -eq $null
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$string.Month -eq $null
Property 'Month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
+ CategoryInfo : InvalidOperation: (.:OperatorToken) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFoundStrict
이 명령은 strict 모드를 켜고 버전 2.0으로 설정합니다. 따라서 함수 호출 또는 초기화되지 않은 변수 또는 존재하지 않는 속성에 대해 괄호와 쉼표가 사용되는 메서드 구문을 사용하는 경우 PowerShell에서 오류를 반환합니다.
샘플 출력은 버전 2.0 strict 모드의 효과를 보여줍니다.
버전 2.0 strict 모드가 없으면 "(3,4)" 값은 아무것도 추가되지 않는 단일 배열 개체로 해석됩니다. 버전 2.0 strict 모드를 사용하면 두 값을 제출하기 위한 잘못된 구문으로 올바르게 해석됩니다.
버전 2.0이 없으면 문자열의 존재하지 않는 Month 속성에 대한 참조는 $Null
반환합니다. 버전 2.0을 사용하면 참조 오류로 올바르게 해석됩니다.
예제 3: strict 모드를 버전 3.0으로 설정
strict 모드가 off
# Strict mode is off by default.
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
True
True
Set-StrictMode -Version 3
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
Index was outside the bounds of the array.
At line:1 char:1
+ $a[2] -eq $null
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException
+ FullyQualifiedErrorId : System.IndexOutOfRangeException
Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $a['abc'] -eq $null
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
strict 모드를 버전 3 이상으로 설정하면 유효하지 않거나 범위를 벗어난 인덱스로 인해 오류가 발생합니다.
매개 변수
-Off
이 cmdlet은 현재 범위 및 모든 자식 범위에 대해 strict 모드를 해제했음을 나타냅니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Version
strict 모드에서 오류를 발생시키는 조건을 지정합니다. 이 매개 변수는 유효한 PowerShell 버전 번호를 허용합니다. 3보다 큰 숫자는 최신
이 매개 변수의 유효 값은 다음과 같습니다.
- 1.0
- 문자열에서 초기화되지 않은 변수를 제외하고 초기화되지 않은 변수에 대한 참조를 금지합니다.
- 2.0
- 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
- 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
- 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
- 3.0
- 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
- 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
- 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
- 범위를 벗어나거나 수정할 수 없는 배열 인덱스를 금지합니다.
- 최근
- 사용 가능한 최신 버전을 선택합니다. 최신 버전은 가장 엄격합니다. 이 값을 사용하여 새 버전이 PowerShell에 추가된 경우에도 스크립트에서 사용 가능한 가장 엄격한 버전을 사용하도록 합니다.
형식: | Version |
별칭: | v |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
None
이 cmdlet에 입력을 파이프할 수 없습니다.
출력
None
이 cmdlet은 출력을 반환하지 않습니다.
참고
Set-StrictMode
설정된 범위와 자식 범위에서만 적용됩니다. PowerShell의 범위에 대한 자세한 내용은 about_Scopes참조하세요.