about_Language_Modes

適用対象: Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Language_Modes

概要

言語のモードと Windows PowerShell® セッションでのその影響について説明します。

詳細説明

Windows PowerShell セッションの言語モードは、Windows PowerShell 言語のどの要素をセッションで使用できるかを部分的に決定します。

Windows PowerShell は次の言語モードをサポートしています。

FullLanguage

ConstrainedLanguage (Windows PowerShell 3.0 に導入されました)

RestrictedLanguage

NoLanguage

言語モードとは

言語モードはセッションで許可されている言語の要素を決定します。

言語モードは、実際には、セッションの作成に使用されるセッション構成 (または「エンドポイント」) のプロパティです。特定のセッション構成を使用するすべてのセッションは、セッション構成の言語モードを持っています。

New-PSSession コマンドレットを使用して作成する PSSession、ComputerName パラメーターを使用する一時的なセッション、および Windows PowerShell を起動すると現れる既定のセッションなど、すべての Windows PowerShell セッションには言語モードがあります。

リモート セッションはリモート コンピューター上のセッション構成を使用して作成されます。セッション構成で設定される言語モードは、セッションの言語モードを決定します。PSSession のセッション構成を指定するには、セッションを作成するコマンドレットの ConfigurationName パラメーターを使用します。

言語モード

このセクションでは、Windows PowerShell セッションの言語モードについて説明します。

完全な言語 (FullLanguage)

FullLanguage 言語モードはセッションですべての言語要素を許可します。FullLanguage は、Windows RT を除くすべてのバージョンの Windows で、既定のセッションの既定の言語モードです。

制限付きの言語 (RestrictedLanguage)

RestrictedLanguage 言語モードでは、ユーザーはコマンド (コマンドレット、関数、CIM コマンド、およびワークフロー) を実行できますが、スクリプト ブロックを使用することはできません。

次の変数のみが許可されます。

$PSCulture

$PSUICulture

$True

$False

$Null。

次の比較演算子のみが許可されます。

eq (等しい)

gt (より大きい)

lt (より小さい)

代入ステートメント、プロパティ参照、およびメソッド呼び出しは許可されません。

言語なし (NoLanguage)

NoLanguage 言語モードでは、ユーザーはコマンドを実行できますが、どの言語要素も使用できません。

制約付きの言語 (ConstrainedLanguage)

ConstrainedLanguage 言語モードは、すべての Windows コマンドレットとすべての Windows PowerShell 言語要素を許可しますが、許可される型を制限します。

ConstrainedLanguage 言語モードは、Windows RT でのユーザー モード コードの整合性 (UMCI) をサポートするために設計されています。これは Windows RT でのみサポートされている言語モードですが、サポートされているすべてのシステムで使用できます。

UMCI は、Windows RT ベースのデバイスに対して、マイクロソフト署名およびマイクロソフト認定のアプリのみインストールを許可することにより、ARM デバイスを保護します。ConstrainedLanguage モードは、ユーザーが Windows PowerShell を使用して UMCI を回避つまり違反することを防ぎます。

ConstrainedLanguage モードの機能は、次のとおりです。

Windows のモジュール内のすべてのコマンドレットとその他の UMCI 承認済みのコマンドレットは完全に機能し、特に指定される場合を除き、システム リソースへの完全なアクセスを持っています。

Windows PowerShell スクリプト言語のすべての要素は許可されています。

Windows に含まれるすべてのモジュールをインポートすることが可能で、モジュールがエクスポートするすべてのコマンドはセッションで実行されます。

Windows PowerShell ワークフローでは、スクリプト ワークフロー (Windows PowerShell 言語で記述されたワークフロー) の記述と実行が可能です。XAML ベースのワークフローはサポートされていないため、「Invoke-Expression -Language XAML」の使用などにより、スクリプト ワークフローで XAML を実行することはできません。また、入れ子になったワークフローは許可されますが、ワークフローが他のワークフローを呼び出すことはできません。

Add-Type コマンドレットは署名付きのアセンブリを読み込むことはできますが、任意の C# コードまたは Win32 API を読み込むことはできません。

New-Object コマンドレットは許可されている型でのみ使用できます (下記参照)。

Windows PowerShell では許可されている型のみ使用できます (下記参照)。その他の型は許可されていません。

型の変換は許可されていますが、結果が許可されている型である場合のみです。

文字列の入力を型に変換するコマンドレットのパラメーターは、結果の型が許可されている型である場合にのみ機能します。

ToString() メソッドと許可された型の .NET メソッド (下記参照) を呼び出すことができます。その他のメソッドを呼び出すことはできません。

ユーザーは許可された型のすべてのプロパティを取得できます。ユーザーは Core 型でのみ、プロパティの値を設定できます。

次の COM オブジェクトのみが許可されています。

Scripting.Dictionary

Scripting.FileSystemObject

VBScript.RegExp

許可されている型:

ConstrainedLanguage 言語モードでは、次の型が許可されています。ユーザーはプロパティの取得、メソッドの呼び出し、およびオブジェクトのこれらの型への変換を行うことができます。

        AliasAttribute
        AllowEmptyCollectionAttribute
        AllowEmptyStringAttribute
        AllowNullAttribute
        Array
        Bool
        byte
        char
        CmdletBindingAttribute
        DateTime
        decimal
        DirectoryEntry
        DirectorySearcher
        double
        float
        Guid
        Hashtable
        int
        Int16
        long
        ManagementClass
        ManagementObject
        ManagementObjectSearcher
        NullString
        OutputTypeAttribute
        ParameterAttribute
        PSCredential
        PSDefaultValueAttribute
        PSListModifier
        PSObject
        PSPrimitiveDictionary
        PSReference
        PSTypeNameAttribute
        Regex
        SByte
        string
        SupportsWildcardsAttribute
        SwitchParameter
        System.Globalization.CultureInfo
        System.Net.IPAddress
        System.Net.Mail.MailAddress
        System.Numerics.BigInteger
        System.Security.SecureString
        TimeSpan
        UInt16
        UInt32
        UInt64

セッション構成の言語モードの検索

セッション構成ファイルを使用してセッション構成が作成されると、セッション構成は LanguageMode プロパティを持ちます。LanguageMode プロパティの値を取得することによって、言語モードを特定できます。

        PS C:\>(Get-PSSessionConfiguration -Name Test).LanguageMode
        FullLanguage

その他のセッション構成では、セッション構成を使用して作成されるセッションの言語モードを検索することにより、言語モードを間接的に特定できます。

セッションの言語モードの検索

セッション状態の LanguageMode プロパティの値を取得することによって、FullLanguage または ConstrainedLanguage セッションの言語モードを検索できます。

たとえば、次のように入力します。

        PS C:\>$ExecutionContext.SessionState.LanguageMode
        ConstrainedLanguage

ただし、RestrictedLanguage および NoLanguage 言語モードでのセッションでは、プロパティ値を取得するのにドット メソッドを使用できません。代わりに、エラー メッセージにより、言語モードが明らかになります。

RestrictedLanguage セッションで $ExecutionContext.SessionState.LanguageMode コマンドを実行すると、Windows PowerShell は PropertyReferenceNotSupportedInDataSection および VariableReferenceNotSupportedInDataSection エラー メッセージを返します。

PropertyReferenceNotSupportedInDataSection:

制限付きの言語のモードまたは Data セクションで、プロパティ参照は許可されていません。

VariableReferenceNotSupportedInDataSection

制限付きの言語モードまたは Data セクションで参照できない変数が参照されています。

NoLanguage セッションで $ExecutionContext.SessionState.LanguageMode コマンドを実行すると、Windows PowerShell は ScriptsNotAllowed エラー メッセージを返します。

ScriptsNotAllowed

構文がこの実行空間でサポートされていません。言語なしのモードが原因である可能性があります。

キーワード

about_ConstrainedLanguage

about_FullLanguage

about_NoLanguage

about_RestrictedLanguage

関連項目

about_Session_ConfigurationFiles

about_Session_Configurations

about_Windows_RT