Set-StrictMode

식, 스크립트 및 스크립트 블록에서 코딩 규칙을 설정하고 적용합니다.

구문

Set-StrictMode
   -Version <Version>
   [<CommonParameters>]
Set-StrictMode
   [-Off]
   [<CommonParameters>]

Description

cmdlet은 Set-StrictMode 현재 범위 및 모든 자식 범위에 대해 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 엄격한 모드의 효과를 보여줍니다.

버전 2.0 엄격한 모드가 (3,4) 없으면 값은 아무것도 추가되지 않는 단일 배열 개체로 해석됩니다. 버전 2.0 엄격한 모드에서는 두 값을 제출하기 위한 잘못된 구문으로 올바르게 해석됩니다.

버전 2.0이 없으면 문자열의 존재하지 않는 Month 속성에 대한 참조만 $Null반환됩니다. 버전 2.0에서는 참조 오류로 올바르게 해석됩니다.

예제 3: strict 모드를 버전 3.0으로 설정

strict 모드를 Off설정하면 유효하지 않거나 범위를 벗어난 인덱스가 null 값을 반환합니다.

# 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처리됩니다. 제공된 값은 System.Version 형식으로 변환할 수 있는 문자열 Latest 또는 문자열이어야 합니다. 버전은 PowerShell의 유효한 릴리스 버전과 일치해야 합니다.

이 매개 변수의 유효 값은 다음과 같습니다.

  • 1.0
    • 문자열에서 초기화되지 않은 변수를 제외하고 초기화되지 않은 변수에 대한 참조를 금지합니다.
  • 2.0
    • 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
    • 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
    • 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
  • 3.0
    • 초기화되지 않은 변수에 대한 참조를 금지합니다. 여기에는 초기화되지 않은 변수가 문자열에 포함됩니다.
    • 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.
    • 메서드 호출에 구문을 사용하는 함수 호출을 금지합니다.
    • 범위를 벗어나거나 수정할 수 없는 배열 인덱스를 금지합니다.
  • Latest
    • 사용 가능한 최신 버전을 선택합니다. 최신 버전은 가장 엄격합니다. 이 값을 사용하여 새 버전이 PowerShell에 추가된 경우에도 스크립트에서 사용 가능한 가장 엄격한 버전을 사용하도록 합니다.

주의

스크립트에서 버전사용하는 Latest 것은 결정적이지 않습니다. 그 의미 Latest 는 PowerShell의 새 릴리스에서 변경될 수 있습니다. 사용하는 이전 버전의 PowerShell용으로 작성된 스크립트는 최신 버전의 PowerShell Set-StrictMode -Version Latest 에서 실행될 때 더 제한적인 규칙이 적용됩니다.

형식:Version
별칭:v
Position:Named
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

None

개체를 이 cmdlet으로 파이프할 수 없습니다.

출력

None

이 cmdlet은 출력을 반환하지 않습니다.

참고

Version 매개 변수는 보다 큰 값을 허용하지만 보다 3.0높은 3.0항목에 대해 정의된 추가 규칙은 없습니다.

Set-StrictMode 은 자식 범위 및 해당 범위에 설정된 범위에서만 유효합니다. PowerShell의 범위에 대한 자세한 내용은 about_Scopes 참조하세요.