about_Language_Modes

簡単な説明

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

長い説明

PowerShell セッションの言語モードによって、セッションで使用できる PowerShell 言語の要素が決定されます。

PowerShell では、次の言語モードがサポートされています。

  • FullLanguage
  • ConstrainedLanguage (PowerShell 3.0 で導入)
  • RestrictedLanguage
  • NoLanguage

言語モードとは

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

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

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

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

言語モード

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

FULL LANGUAGE (FullLanguage)

FullLanguage モードでは、セッション内のすべての言語要素が許可されます。 FullLanguage は、すべてのバージョンの既定のセッションに対する既定の言語モードで、Windowsを除Windows RT。

制限付き言語 (RestrictedLanguage)

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

PowerShell 7.2 より、 New-Object システム ロックダウンが構成されている場合、 RestrictedLanguage モードではコマンドレットが無効になります。

既定では、RestrictedLanguage モードでは、次の変数だけが許可されます。

  • $PSCulture
  • $PSUICulture
  • $True
  • $False
  • $Null

RestrictedLanguage モードを使用するモジュール マニフェストでは、次の追加変数も許可されます。

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures

次の比較演算子のみを使用できます。

  • -eq (等しい)
  • -gt (より大きい)
  • -lt (より小さい)

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

言語なし (NoLanguage)

NoLanguage モードは、API を通じてのみ使用できます。 NoLanguage モードは、フォームのスクリプト テキストが許可されません。 これにより、解析および実行される PowerShell スクリプトのフラグメントを送信する AddScript() メソッドの使用が含まれる可能性があります。 AddCommand()AddParameter() のみを使用できます。パーサーは使用されません。

PowerShell 7.2 から、 New-Object システム ロックダウンが構成されている場合、 NoLanguage モードではコマンドレットが無効になります。

制約付き言語 (制約付き言語)

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

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

UMCI では、Microsoft が署名したアプリと Microsoft 認定のアプリのみをベースのデバイスにインストールできるようにすることで、ARM デバイスWindows RT保護します。 ConstrainedLanguage モードを 使用すると、ユーザーは PowerShell を使用して UMCI を回避したり、UMCI に違反したりできません。

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

  • Windows モジュール内のすべてのコマンドレット、および他の UMCI で承認されたコマンドレットは完全に機能し、特に示されている場合を除き、システム リソースに完全にアクセスできます。

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

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

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

  • コマンドレット New-Object は、許可されている型でのみ使用できます (以下に示します)。

  • PowerShell では、許可される型 (以下に示す) のみを使用できます。 その他の型は使用できません。

  • 型変換は許可されますが、結果が許可される型の場合にのみ許可されます。

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

  • 許可 ToString() される型の メソッドと .NET メソッド (以下に示します) を呼び出すことができます。 その他のメソッドは呼び出されません。

  • ユーザーは、許可される型のすべてのプロパティを取得できます。 ユーザーは、コア型でのみプロパティの値を設定できます。 次の 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.Net.IPAddress
  • システム .Net. Mail. MailAddress
  • BigInteger
  • System.Security.SecureString
  • TimeSpan
  • UInt16
  • UInt32
  • UInt64

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

セッション構成ファイルを使用してセッション構成を作成する場合、セッション構成には LanguageMode プロパティがあります。 言語モードを確認するには、LanguageMode プロパティの値を取得します。

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

他のセッション構成では、セッション構成で作成されたセッションの言語モードを見つけることによって、言語モードを間接的に見つけることができます。

注意

セッション構成は、WSMan ベースの PowerShell リモート処理の機能です。 これらは、、 Invoke-Command 、または Enter-PSSession コマンドレットを使用して New-PSSession リモート Windows コンピューターに接続する場合にのみ使用されます。 コマンドレットは、 Get-PSSessionConfiguration Windows コンピューターでのみ使用できます。

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

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

次に例を示します。

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

ただし、 RestrictedLanguage モードと nolanguage モードのセッションでは、ドットメソッドを使用してプロパティ値を取得することはできません。 代わりに、エラーメッセージに言語モードが表示されます。

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

  • PropertyReferenceNotSupportedInDataSection: プロパティ参照は、制限付き言語モードまたはデータセクションでは許可されていません。
  • VariableReferenceNotSupportedInDataSection: 制限付き言語モードまたはデータセクションで参照できない変数が参照されています。

NoLanguage セッションでコマンドを実行 $ExecutionContext.SessionState.LanguageMode すると、PowerShell によって、 スクリプトで許可さ れているエラーメッセージが返されます。

  • スクリプト Notallowed: 構文は、この実行空間ではサポートされていません。 これは、言語なしモードであることが原因である可能性があります。

関連項目