about_Language_Modes

概要

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

詳細説明

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

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

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

言語モードとは

言語モードによって、セッションで許可される言語要素が決まります。

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

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

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

言語モード

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

全言語 (FullLanguage)

FullLanguage モードでは、セッションのすべての言語要素が許可されます。 FullLanguage は、すべてのバージョンの Windows 上の既定のセッションの既定の言語モードです 。ただし、既定のWindows RT。

RESTRICTED LANGUAGE (RestrictedLanguage)

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

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

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

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

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

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

NO LANGUAGE (NoLanguage)

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 型変換は許可されますが、結果が許可される型である場合に限ります。

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

  • ToString () メソッドと、許可されている型 (以下の一覧を参照) の .net メソッドを呼び出すことができます。 他のメソッドを呼び出すことはできません。

  • ユーザーは、許可された型のすべてのプロパティを取得できます。 ユーザーは、コア型に対してのみプロパティの値を設定できます。 次の COM オブジェクトのみが許可されます。

    • スクリプト. 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
  • システム .Net. Mail. MailAddress
  • BigInteger
  • System.Security.SecureString
  • TimeSpan
  • UInt16
  • UInt32
  • UInt64

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

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

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

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

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

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

以下に例を示します。

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

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

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

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

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

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

関連項目