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

구문

Set-StrictMode -Off [<CommonParameters>]

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

설명

Set-StrictMode cmdlet은 현재 범위와 모든 하위 범위에 대해 Strict 모드를 구성하고 Strict 모드를 설정 및 해제합니다. Strict 모드가 설정된 경우 Windows PowerShell은 식, 스크립트 또는 스크립트 블록의 내용이 기본적인 최상의 코딩 규칙을 위반할 때 종료 오류를 생성합니다.

적용되는 코딩 규칙을 확인하려면 Version 매개 변수를 사용합니다.

Set-PSDebug cmdlet과 달리 Set-StrictMode는 현재 범위와 하위 범위에만 영향을 미치므로 전역 범위에 영향을 미치지 않고 스크립트나 함수에서 사용할 수 있습니다.

Set-StrictMode가 해제된 경우 초기화되지 않은 변수(Version 1)는 유형에 따라 0 또는 $null 값을 가진 것으로 간주됩니다. 존재하지 않는 속성에 대한 참조는 $null을 반환하고 잘못된 함수 구문의 결과는 다양하며 오류가 발생합니다. 이름 없는 변수는 사용할 수 없습니다.

매개 변수

-Off

Strict 모드를 해제합니다. 이 매개 변수는 "Set-PSDebug -Strict"도 해제합니다.

필수 여부

true

위치

named

기본값

없음

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Version <Version>

Strict 모드에서 오류를 발생시키는 조건을 지정합니다. 이 매개 변수는 필수 사항입니다.

유효한 값은 "1.0", "2.0" 및 "Latest"입니다. 다음 목록에는 각 값의 결과가 나와 있습니다.

1.0

-- 초기화되지 않은 변수(문자열의 초기화되지 않은 변수 제외)에 대한 참조를 금지합니다.

2.0

-- 초기화되지 않은 변수(문자열의 초기화되지 않은 변수 포함)에 대한 참조를 금지합니다.

-- 개체의 존재하지 않는 속성에 대한 참조를 금지합니다.

-- 메서드 호출 구문을 사용하는 함수 호출을 금지합니다.

-- 이름이 없는 변수(${})를 금지합니다.

Latest:

-- 사용 가능한 최신(가장 엄격한) 버전을 선택합니다. 새 버전이 Windows PowerShell에 추가된 경우에도 스크립트에서 사용 가능한 가장 엄격한 버전을 사용하도록 하려면 이 값을 사용합니다.

필수 여부

true

위치

named

기본값

없음

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

없음

입력을 이 cmdlet으로 파이프할 수 없습니다.

출력

없음

이 cmdlet은 어떠한 출력도 반환하지 않습니다.

참고

Set-StrictMode는 Set-PSDebug의 Strict 매개 변수와 유사합니다. "Set-Strictmode -version 1"은 "Set-PSDebug -strict"와 동일합니다. 단, Set-PSDebug는 모든 범위에서 적용됩니다. Set-StrictMode는 설정된 범위와 그 하위 범위에서만 적용됩니다. Windows PowerShell의 범위에 대한 자세한 내용은 about_Scopes를 참조하십시오.

예 1

C:\PS>set-strictmode -version 1.0

C:\PS> $a -gt 5
False
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으로 설정합니다. 따라서 초기화되지 않은 변수를 참조하려고 하면 실패합니다.

샘플 출력에 버전 1.0 Strict 모드의 효과가 나와 있습니다.






예 2

C:\PS># set-strictmode -version 2.0

# Strict mode is off by default.

C:\PS> function add ($a, $b) {$a + $b}
C:\PS> add 3 4
7
C:\PS> add(3,4)
3
4

C:\PS> set-strictmode -version 2.0

C:\PS> 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


C:\PS> set-strictmode -off

C:\PS> $string = "This is a string".
C:\PS> $string.Month
C:\PS>

C:\PS> set-strictmode -version 2.0

C:\PS> $string = "This is a string".
C:\PS> $string.Month
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으로 설정합니다. 따라서 Windows PowerShell은 함수 호출에 메서드 구문(괄호 및 쉼표)을 사용하거나 초기화되지 않은 변수나 존재하지 않는 속성을 참조하는 경우 오류를 발생시킵니다.

샘플 출력에 버전 2.0 Strict 모드의 효과가 나와 있습니다.

버전 2.0 Strict 모드를 사용하지 않는 경우 "(3,4)" 값은 아무 것도 추가되지 않은 단일 배열 개체로 해석되지만 버전 2.0 Strict 모드를 사용하는 경우에는 두 값을 전송하기 위한 잘못된 구문으로 제대로 해석됩니다.

버전 2.0을 사용하지 않는 경우 문자열의 존재하지 않는 Month 속성을 참조하면 null만 반환되지만 버전 2.0을 사용하는 경우에는 참조 오류로 제대로 해석됩니다.






참고 항목




목차