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

什麼是語言模式?

語言模式可決定工作階段中允許的語言項目。

語言模式其實是用來建立工作階段之工作階段組態 (或「端點」) 的屬性。使用特定工作階段組態的所有工作階段都有工作階段組態的語言模式。

所有 Windows PowerShell 工作階段都有語言模式,包括您使用 New-PSSession Cmdlet 來建立的 PSSession、使用 ComputerName 參數的暫存工作階段,以及當您啟動 Windows PowerShell 時所出現的預設工作階段。

遠端工作階段是使用遠端電腦上的工作階段組態來建立的。該工作階段組態中設定的語言模式會決定工作階段的語言模式。若要指定 PSSession 的工作階段組態,請使用建立工作階段之 Cmdlet 的 ConfigurationName 參數。

語言模式

本節描述 Windows PowerShell 工作階段中的語言模式。

完整語言 (FullLanguage)

FullLanguage 語言模式可允許工作階段中的所有語言項目。除了 Windows RT 之外,在所有 Windows 版本上,預設工作階段的預設語言模式都是 FullLanguage。

限制語言 (RestrictedLanguage)

在 RestrictedLanguage 語言模式中,使用者可以執行命令 (Cmdlet、函式、CIM 命令和工作流程),但不能使用指令碼區塊。

只允許下列變數:

$PSCulture

$PSUICulture

$True

$False

$Null。

只允許下列比較運算子:

eq (等於)

gt (大於)

lt (小於)

不允許指派陳述式、屬性參照及方法呼叫。

無語言 (NoLanguage)

在 NoLanguage 語言模式中,使用者可以執行命令,但不能使用任何語言項目。

條件約束語言 (ConstrainedLanguage)

ConstrainedLanguage 語言模式允許所有 Windows Cmdlet 和所有 Windows PowerShell 語言項目,但限制允許的類型。

ConstrainedLanguage 語言模式的設計是為了支援在 Windows RT 上的使用者模式程式碼完整性 (UMCI)。這是 Windows RT 上唯一支援的語言模式,但是在所有支援的系統中皆可使用。

UMCI 只允許 Microsoft 簽署和 Microsoft 認證的應用程式安裝在 Windows RT 裝置上,以保護 ARM 裝置。ConstrainedLanguage 模式會防止使用者使用 Windows PowerShell 來規避或違反 UMCI。

ConstrainedLanguage 模式的功能如下所示:

Windows 模組中的所有 Cmdlet 以及其他 UMCI 核准的 Cmdlet 可完整運作,並可完整存取系統資源 (除非另有註明)。

可允許 Windows PowerShell 指令碼語言的所有項目。

Windows 中包含的所有模組都可以匯入,而模組匯出的所有命令都可以在工作階段中執行。

在 Windows PowerShell 工作流程中,您可以撰寫及執行指令碼工作流程 (以 Windows PowerShell 語言撰寫的工作流程)。不支援 XAML 型工作流程,而且您無法在指令碼工作流程中執行 XAML,例如使用 "Invoke-Expression -Language XAML" 來執行。此外,雖然允許巢狀工作流程,但工作流程無法呼叫其他工作流程。

Add-Type Cmdlet 可以載入已簽署的組件,但無法載入任意 C# 程式碼或 Win32 API。

New-Object Cmdlet 只能用於所允許的類型 (如下所示)。

只有允許的類型 (如下所示) 可用於 Windows PowerShell。不允許其他類型。

允許類型轉換,但僅限於結果是允許的類型時。

唯有當結果類型是允許的類型時,將字串輸入轉換成類型的 Cmdlet 參數才有效。

可以叫用 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:

限制語言模式或資料區段中不允許屬性參考。

VariableReferenceNotSupportedInDataSection

所參考的變數是不能在限制語言模式或資料區段中參考的變數。

當您在 NoLanguage 工作階段中執行 $ExecutionContext.SessionState.LanguageMode 命令時,Windows PowerShell 會傳回 ScriptsNotAllowed 錯誤訊息。

ScriptsNotAllowed

這個 Runspace 不支援該語法。這可能是因為其為無語言模式。

關鍵字

about_ConstrainedLanguage

about_FullLanguage

about_NoLanguage

about_RestrictedLanguage

另請參閱

about_Session_ConfigurationFiles

about_Session_Configurations

about_Windows_RT