Set-StrictMode
式、スクリプト、およびスクリプト ブロックでのコーディング規則を確立し、適用します。
構文
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
説明
Set-StrictMode
コマンドレットは、現在のスコープとすべての子スコープの厳密モードを構成し、オンとオフを切り替えます。 厳密モードがオンの場合、式、スクリプト、またはスクリプト ブロックの内容が基本的なベスト プラクティスのコーディング規則に違反すると、PowerShell によって終了エラーが生成されます。
Version パラメーターを使用して、適用するコーディング規則を決定します。
Set-PSDebug -Strict
コマンドレットを使用すると、グローバル スコープの厳密モードが有効になります。 Set-StrictMode
は、現在のスコープとその子スコープにのみ影響します。 その後、スクリプトまたは関数でそれを使用して、グローバル スコープから継承された設定をオーバーライドできます。
Set-StrictMode
がオフの場合、PowerShell には次の動作があります。
- 初期化されていない変数は、型に応じて、
0
(ゼロ) または$Null
の値を持つものと見なされます - 存在しないプロパティへの参照が返される
$Null
- 不適切な関数構文の結果は、エラー条件によって異なります
- 配列内の無効なインデックスを使用して値を取得しようとすると、戻り値が返されます
$Null
例
例 1: 厳密モードをバージョン 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.
厳密モードがバージョン 1.0
に設定されている場合、初期化されていない変数を参照しようとすると失敗します。
例 2: バージョン 2.0 として strict モードを有効にする
# 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 つの値を送信するための誤った構文として正しく解釈されます。
バージョンが 2.0
されていない場合、文字列の存在しない Month プロパティへの参照は、 $Null
のみを返します。 バージョン 2.0
では、参照エラーとして正しく解釈されます。
例 3: 厳密モードをバージョン 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."
厳密モードをバージョン 3
以上に設定すると、無効または範囲外のインデックスがエラーになります。
パラメーター
-Off
現在のスコープとすべての子スコープに対して、このコマンドレットが strict モードをオフにすることを示します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Version
厳格モードでエラーとなる条件を指定します。 このパラメーターは、任意の有効な PowerShell バージョン番号を受け入れます。 3
より大きい数値は、Latest
として扱われます。 指定する値は、文字列 Latest
または System.Version 型に変換できる文字列である必要があります。 バージョンは、PowerShell の有効なリリース バージョンと一致している必要があります。
このパラメーターの有効な値は次のとおりです。
1.0
- 文字列内の初期化されていない変数を除き、初期化されていない変数への参照を禁止します。
2.0
- 初期化されていない変数への参照を禁止します。 これには、文字列内の初期化されていない変数が含まれます。
- オブジェクトの存在しないプロパティへの参照を禁止します。
- メソッドの呼び出しに構文を使用する関数呼び出しを禁止します。
3.0
- 初期化されていない変数への参照を禁止します。 これには、文字列内の初期化されていない変数が含まれます。
- オブジェクトの存在しないプロパティへの参照を禁止します。
- メソッドの呼び出しに構文を使用する関数呼び出しを禁止します。
- 範囲外または解決できない配列インデックスを禁止します。
Latest
- 利用可能な最新バージョンを選択します。 最新バージョンが最も厳密です。 新しいバージョンが PowerShell に追加された場合でも、スクリプトで使用可能な最も厳密なバージョンが使用されるようにするには、この値を使用します。
注意事項
スクリプトで Version にLatest
を使用することは決定論的ではありません。 Latest
の意味は、PowerShell の新しいリリースで変わる可能性があります。 Set-StrictMode -Version Latest
を使用する古いバージョンの PowerShell 用に記述されたスクリプトは、新しいバージョンの PowerShell で実行する場合、より制限の厳しい規則の対象になります。
型: | Version |
Aliases: | v |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
None
このコマンドレットにオブジェクトをパイプすることはできません。
出力
None
このコマンドレットは、出力を返しません。
メモ
Version パラメーターは3.0
より大きい値を受け取りますが、3.0
より大きい値に対して追加の規則は定義されていません。
Set-StrictMode
は、設定されているスコープとその子スコープでのみ有効です。 PowerShell のスコープの詳細については、「 about_Scopes」を参照してください。
関連リンク
PowerShell