Set-StrictMode
式、スクリプト、およびスクリプト ブロックのコーディング規則を設定して適用します。
構文
Set-StrictMode -Off [<CommonParameters>]
Set-StrictMode -Version <Version> [<CommonParameters>]
説明
Set-StrictMode コマンドレットは、現在のスコープ (およびすべての子スコープ) に対して strict モードを構成し、strict モードの切り替えを行います。strict モードを有効にすると、式、スクリプト、またはスクリプト ブロックの内容がベスト プラクティスの基本コーディング規則に違反した場合に Windows PowerShell により終了エラーが生成されます。
Version パラメーターを使用して、どのコーディング規則を適用するかを決定します。
Set-PSDebug コマンドレットとは異なり、Set-StrictMode は現在のスコープとその子スコープにのみ影響します。そのため、このコマンドレットはグローバル スコープに影響することなく、スクリプトまたは関数で使用できます。
Set-StrictMode を無効にすると、初期化されていない変数 (バージョン 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>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
None パイプを使用してこのコマンドレットに入力を渡すことはできません。 |
出力 |
None このコマンドレットによる戻り値はありません。 |
注
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 つの値を間違った構文で送信しようとしていることが正しく解釈されます。
バージョン 2.0 が無効になっている状態では、文字列に存在しない Month プロパティへの参照は Null を返すだけです。バージョン 2.0 が有効になっている状態では、参照エラーとして正しく解釈されます。