PowerShell Cmdlet - Set-StrictMode
 記事記号:[mg1993] 初版:2011/Sep/30

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    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 [<SwitchParameter>]
        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、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    None
        パイプを使用してこのコマンドレットに入力を渡すことはできません。
    
出力
    None
        このコマンドレットによる戻り値はありません。
    
メモ
        Set-StrictMode は、Set-PSDebug の Strict パラメーターに似ています。"Set-
        Strictmode -version 1" と "Set-PSDebug -strict" では同等の結果が得られま
        す。ただし、Set-PSDebug がすべてのスコープで有効であるのに対して、Set-St
        rictMode はそれが設定されたスコープとその子スコープでのみ有効です。Windo
        ws 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) [], RuntimeExcepti
                                  on
        + 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 separ
    ated 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) [], Runti
                                  meException
        + FullyQualifiedErrorId : PropertyNotFoundStrict
    
    説明
    -----------
    このコマンドは、strict モードを有効にして、バージョン 2.0 に設定します。その
    結果、関数の呼び出しにメソッド構文 (丸かっこおよびコンマ) を使用した場合や、
    初期化されていない変数または存在しないプロパティを参照した場合は、Windows Po
    werShell によりエラーがスローされます。
    
    サンプル出力には、バージョン 2.0 の strict モードの結果が表示されます。
    
    バージョン 2.0 の strict モードが無効になっている状態では、"(3,4)" 値は単一の
    配列オブジェクトとして解釈され、そのオブジェクトには何も追加されません。バー
    ジョン 2.0 の strict モードが有効になっている状態では、2 つの値を間違った構文
    で送信しようとしていることが正しく解釈されます。
    
    バージョン 2.0 が無効になっている状態では、文字列に存在しない Month プロパテ
    ィへの参照は Null を返すだけです。バージョン 2.0 が有効になっている状態では、
    参照エラーとして正しく解釈されます。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113450
    about_Debuggers 
    about_Scopes 
    Set-PSDebug 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Set-StrictMode
ご利用数: 1969139
感想・要望・問い合わせは こちら