다음을 통해 공유


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설정되면 유효하지 않거나 범위를 벗어난 인덱스 결과는 null 값을 반환합니다.

# 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참조하세요.