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
(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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
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)
InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.
Set-StrictMode -Off
$string = "This is a string."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month
PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.
이 명령은 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)
$null -eq $a[2]
$null -eq $a['abc']
True
True
Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
OperationStopped: Index was outside the bounds of the array.
InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
strict 모드가 버전 3
이상으로 설정되면 유효하지 않거나 범위를 벗어난 인덱스로 인해 오류가 발생합니다.
매개 변수
-Off
이 cmdlet은 현재 범위 및 모든 자식 범위에 대해 strict 모드를 해제했음을 나타냅니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Version
strict 모드에서 오류를 발생시키는 조건을 지정합니다. 이 매개 변수는 유효한 PowerShell 버전 번호를 허용합니다.
3
보다 높은 숫자는 Latest
처리됩니다. 제공된 값은 Latest
문자열이거나 System.Version 형식으로 변환할 수 있는 문자열이어야 합니다. 버전은 PowerShell의 유효한 릴리스 버전과 일치해야 합니다.
이 매개 변수의 유효 값은 다음과 같습니다.
1.0
- 문자열에서 초기화되지 않은 변수를 제외하고 초기화되지 않은 변수에 대한 참조를 금지합니다.
2.0
- 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
- 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
- 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
3.0
- 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
- 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
- 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
- 범위를 벗어나거나 수정할 수 없는 배열 인덱스를 금지합니다.
Latest
- 사용 가능한 최신 버전을 선택합니다. 최신 버전은 가장 엄격합니다. 이 값을 사용하여 새 버전이 PowerShell에 추가된 경우에도 스크립트에서 사용 가능한 가장 엄격한 버전을 사용하도록 합니다.
주의
스크립트에서 버전Latest
사용하는 것은 결정적이지 않습니다.
Latest
의미는 PowerShell의 새 릴리스에서 변경될 수 있습니다.
Set-StrictMode -Version Latest
사용하는 이전 버전의 PowerShell용으로 작성된 스크립트는 최신 버전의 PowerShell에서 실행될 때 더 제한적인 규칙이 적용됩니다.
형식: | Version |
별칭: | v |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
None
개체를 이 cmdlet으로 파이프할 수 없습니다.
출력
None
이 cmdlet은 출력을 반환하지 않습니다.
참고
Version 매개 변수는 3.0
보다 큰 값을 허용하지만 3.0
보다 높은 항목에 대해 정의된 추가 규칙은 없습니다.
Set-StrictMode
자식 범위 및 해당 범위에 설정된 범위에서만 적용됩니다. PowerShell의 범위에 대한 자세한 내용은 about_Scopes참조하세요.