次の方法で共有


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.

strict モードをバージョン 1.0に設定すると、初期化されていない変数の参照が失敗します。

例 2: 厳密モードをバージョン 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.

このコマンドは、厳密モードをオンにし、バージョン 2.0に設定します。 その結果、関数呼び出しまたは参照の初期化されていない変数または存在しないプロパティに対してかっことコンマを使用するメソッド構文を使用すると、PowerShell はエラーを返します。

サンプル出力は、バージョン 2.0 厳格モードの効果を示しています。

バージョン 2.0 厳密モードを使用しない場合、 (3,4) 値は何も追加されない単一の配列オブジェクトとして解釈されます。 バージョン 2.0 厳格モードでは、2 つの値を送信するための誤った構文として正しく解釈されます。

バージョン 2.0がない場合、文字列の存在しない Month プロパティへの参照は、 のみを $Null返します。 バージョン 2.0では、参照エラーとして正しく解釈されます。

例 3: 厳密モードをバージョン 3.0 として有効にする

strict モードが オフに設定されている場合、無効または範囲外のインデックスの結果は 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

このコマンドレットは、現在のスコープとすべての子スコープの厳密モードをオフにすることを示します。

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Version

厳格モードでエラーとなる条件を指定します。 このパラメーターは、任意の有効な PowerShell バージョン番号を受け入れます。 より 3 大きい数値は、 として Latest扱われます。 指定する値は、System.Version 型に変換できる文字列Latestまたは文字列である必要があります。 バージョンは、PowerShell の有効なリリース バージョンと一致している必要があります。

このパラメーターの有効な値は次のとおりです。

  • 1.0
    • 文字列内の初期化されていない変数を除き、初期化されていない変数への参照を禁止します。
  • 2.0
    • 初期化されていない変数への参照を禁止します。 これには、文字列内の初期化されていない変数が含まれます。
    • オブジェクトの存在しないプロパティへの参照を禁止します。
    • メソッドの呼び出しに構文を使用する関数呼び出しを禁止します。
  • 3.0
    • 初期化されていない変数への参照を禁止します。 これには、文字列内の初期化されていない変数が含まれます。
    • オブジェクトの存在しないプロパティへの参照を禁止します。
    • メソッドの呼び出しに構文を使用する関数呼び出しを禁止します。
    • 範囲外または解決できない配列インデックスを禁止します。
  • Latest
    • 利用可能な最新バージョンを選択します。 最新バージョンが最も厳密です。 新しいバージョンが PowerShell に追加された場合でも、スクリプトで使用可能な最も厳密なバージョンが使用されるようにするには、この値を使用します。

注意事項

スクリプトでバージョンにを使用Latestすることは、決定論的ではありません。 の Latest 意味は、PowerShell の新しいリリースで変わる可能性があります。 を使用 Set-StrictMode -Version Latest する古いバージョンの PowerShell 用に記述されたスクリプトは、新しいバージョンの PowerShell で実行すると、より制限の厳しい規則の対象になります。

Type:Version
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

入力

None

オブジェクトをこのコマンドレットにパイプすることはできません。

出力

None

このコマンドレットは、出力を返しません。

メモ

Version パラメーターは より大きい値を受け入れますが、 より3.0大きい3.0値に対して追加の規則は定義されていません。

Set-StrictMode は、設定されているスコープとその子スコープでのみ有効です。 PowerShell のスコープの詳細については、「 about_Scopes」を参照してください。