Поделиться через


about_Language_Modes

Краткое описание

Объясняет режимы языка и их влияние на сеансы PowerShell.

Подробное описание

Языковой режим сеанса PowerShell определяет, какие элементы языка PowerShell можно использовать в сеансе.

PowerShell поддерживает следующие языковые режимы:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (представлено в PowerShell 3.0)
  • NoLanguage

Что такое языковой режим?

В режиме языка определяются элементы языка, разрешенные в сеансе.

Языковой режим — это свойство конфигурации сеанса (или конечной точки), используемое для создания сеанса. Все сеансы, использующие определенную конфигурацию сеанса, имеют языковой режим конфигурации сеанса.

Все сеансы PowerShell имеют языковой режим. Сеансы создаются с помощью конфигураций сеансов на целевом компьютере. Языковой режим, заданный в конфигурации сеанса, определяет языковой режим сеанса. Чтобы указать конфигурацию сеанса PSSession, используйте параметр ConfigurationName командлетов, создающих сеанс.

Начиная с PowerShell 7.3, можно запустить pwsh с параметром ConfigurationFile . Это позволяет запустить PowerShell с помощью определенной конфигурации.

Поиск языкового режима сеанса

Вы можете найти языковой режим сеанса FullLanguage , ConstrainedLanguage получив значение свойства LanguageMode состояния сеанса.

Например:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Однако в сеансах и RestrictedLanguage NoLanguage режимах нельзя использовать оператор доступа к членам (.) для получения значений свойств. Вместо этого сообщение об ошибке показывает языковой режим.

При выполнении $ExecutionContext.SessionState.LanguageMode команды в сеансе RestrictedLanguage PowerShell возвращает сообщения об ошибках PropertyReferenceNotSupportedInDataSection и VariableReferenceNotSupportedInDataSection .

  • PropertyReferenceNotSupportedInDataSection: ссылки на свойства не допускаются в ограниченном языковом режиме или в разделе данных.
  • VariableReferenceNotSupportedInDataSection: переменная, на которую нельзя ссылаться в ограниченном языковом режиме или на раздел данных ссылается.

При выполнении $ExecutionContext.SessionState.LanguageMode команды в сеансе NoLanguage PowerShell возвращает сообщение об ошибке ScriptsNotAllowed .

  • ScriptsNotAllowed: синтаксис не поддерживается этим пространством выполнения. Это может быть связано с тем, что он находится в режиме без языка.

Поиск языкового режима конфигурации сеанса

При создании конфигурации сеанса с помощью файла конфигурации сеанса конфигурация сеанса имеет свойство LanguageMode . Вы можете найти языковой режим, получив значение свойства LanguageMode .

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

В других конфигурациях сеанса можно косвенно найти языковой режим, найдя языковой режим сеанса, созданного с помощью конфигурации сеанса.

Настройка языкового режима

Режим языка в сеансе PowerShell можно задать с помощью встроенной $ExecutionContext переменной.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Однако это полезно только для экспериментирования с языковыми режимами. Языковые режимы предназначены для обеспечения безопасности сеансов PowerShell для определенных контекстов.

Режимы языков задаются при использовании политики управления системным приложением или создания конфигурации сеанса.

Использование политики управления системным приложением

PowerShell автоматически запускается в ConstrainedLanguage режиме при выполнении в системной политике управления приложениями. Обнаруженные политики управления приложениями — AppLocker и управление приложениями в Защитнике Windows (WDAC) на платформах Windows.

PowerShell применяет другие ограничения помимо языковых режимов при обнаружении политики управления приложениями. Например, существуют дополнительные ограничения на поиск точек и импорт модулей в политике.

При запуске сеанса PowerShell в политике он выполняется в ConstrainedLanguage режиме. Начиная с PowerShell 7.4, в отображаемом баннере запуска содержится сообщение, указывающее, что он работает в этом режиме. Это позволяет пользователям использовать интерактивный интерфейс оболочки, выполнять командлеты и собственные команды, а также получать доступ к основным элементам языка. Но пользователь не может получить доступ к API PowerShell, .NET или COM, которые могут быть злоупотреблять злоумышленником.

Любой скрипт или модуль на основе скриптов, выполняемый в этом сеансе, выполняется в ConstrainedLanguage режиме. Однако любой скрипт или модуль на основе скриптов, разрешенный политикой, выполняется в FullLanguage режиме без каких-либо ограничений. Таким образом, система, заблокированная политикой, может иметь сценарии, доверенные политикой и выполняющиеся с небольшими ограничениями.

Использование конфигурации сеанса

Удаленное взаимодействие PowerShell при необходимости поддерживает создание пользовательских конфигураций сеансов. Вы можете задать языковой режим, который требуется для этой пользовательской конфигурации. Конфигурации PowerShell Just Enough Administration (JEA) используют NoLanguage режим, чтобы ограничить сеансы только вызовами команд. С помощью JEA удаленный сеанс может быть ограничен определенными пользователями. Пользователи JEA ограничены выполнением определенного набора команд и не могут напрямую обращаться к API, файловой системе или другим системным ресурсам.

Дополнительные сведения см. в разделе конфигурации сеансов JEA и New-PSSessionConfigurationFile.

Функции и ограничения языкового режима

В этом разделе описываются языковые режимы в сеансах PowerShell.

FullLanguage режим

Режим FullLanguage разрешает все языковые элементы в сеансе. FullLanguage — это языковой режим по умолчанию для сеансов по умолчанию во всех версиях Windows.

RestrictedLanguage режим

В RestrictedLanguage режиме пользователи могут выполнять команды (командлеты, функции, команды CIM и рабочие процессы), но не могут использовать блоки скриптов. Этот режим также используется для обработки манифестов модулей, загруженных с помощью Import-Module.

Начиная с PowerShell 7.2 New-Object командлет отключен в RestrictedLanguage режиме при настройке системной блокировки.

По умолчанию в режиме разрешены RestrictedLanguage только следующие переменные:

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

Манифесты модуля загружаются в RestrictedLanguage режиме и могут использовать следующие дополнительные переменные:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Любые переменные среды, например $ENV:TEMP

Разрешены только следующие операторы сравнения:

  • -eq (равно)
  • -gt (больше)
  • -lt (меньше)

Операторы назначения, ссылки на свойства и вызовы методов не допускаются.

ConstrainedLanguage режим

ConstrainedLanguage режим предназначен для предоставления базовых языковых элементов, таких как циклы, условные условия, расширение строки и доступ к свойствам объекта. Ограничения препятствуют операциям, которые могут быть злоупотреблять злоумышленником.

Этот ConstrainedLanguage режим разрешает все командлеты и подмножество элементов языка PowerShell, но ограничивает типы объектов, которые можно использовать.

Функции ConstrainedLanguage режима приведены следующим образом:

  • Все командлеты в модулях Windows полностью функциональны и имеют полный доступ к системным ресурсам, за исключением отмеченных.
  • Разрешены все элементы языка сценариев PowerShell.
  • Все модули, включенные в Windows, можно импортировать и все команды, экспортируемые модулями в сеансе.
  • Add-Type Командлет может загружать подписанные сборки, но не может загружать произвольный код C# или API Win32.
  • New-Object Командлет можно использовать только для разрешенных типов (перечисленных ниже).
  • В PowerShell можно использовать только разрешенные типы. Другие типы не разрешены. Преобразование типов допускается, но только в том случае, если результат является допустимым типом.
  • Параметры командлета, преобразующие строковые входные данные в типы, работают только в том случае, если результирующий тип является допустимым типом.
  • Метод ToString() и методы разрешенных типов .NET можно вызвать.
  • Пользователи могут получить все свойства разрешенных типов. Пользователи могут задавать значения свойств только для разрешенных типов.

Следующие типы .NET разрешены в ConstrainedLanguage режиме. Пользователи могут получать свойства, вызывать методы и преобразовывать объекты в эти типы.

Допустимые типы:

  • [adsi]
  • [adsisearcher]
  • [Alias]
  • [AllowEmptyCollection]
  • [AllowEmptyString]
  • [AllowNull]
  • [ArgumentCompleter]
  • [ArgumentCompletions]
  • [array]
  • [bigint]
  • [bool]
  • [byte]
  • [char]
  • [cimclass]
  • [cimconverter]
  • [ciminstance]
  • [CimSession]
  • [cimtype]
  • [CmdletBinding]
  • [cultureinfo]
  • [datetime]
  • [decimal]
  • [double]
  • [DscLocalConfigurationManager]
  • [DscProperty]
  • [DscResource]
  • [ExperimentAction]
  • [Experimental]
  • [ExperimentalFeature]
  • [float]
  • [guid]
  • [hashtable]
  • [int]
  • [int16]
  • [int32]
  • [int64]
  • [ipaddress]
  • [IPEndpoint]
  • [long]
  • [mailaddress]
  • [Microsoft.PowerShell.Commands.ModuleSpecification]
  • [NoRunspaceAffinity]
  • [NullString]
  • [Object[]]
  • [ObjectSecurity]
  • [ordered]
  • [OutputType]
  • [Parameter]
  • [PhysicalAddress]
  • [pscredential]
  • [pscustomobject]
  • [PSDefaultValue]
  • [pslistmodifier]
  • [psobject]
  • [psprimitivedictionary]
  • [PSTypeNameAttribute]
  • [ref]
  • [regex]
  • [sbyte]
  • [securestring]
  • [semver]
  • [short]
  • [single]
  • [string]
  • [SupportsWildcards]
  • [switch]
  • [timespan]
  • [uint]
  • [uint16]
  • [uint32]
  • [uint64]
  • [ulong]
  • [uri]
  • [ushort]
  • [ValidateCount]
  • [ValidateDrive]
  • [ValidateLength]
  • [ValidateNotNull]
  • [ValidateNotNullOrEmpty]
  • [ValidateNotNullOrWhiteSpace]
  • [ValidatePattern]
  • [ValidateRange]
  • [ValidateScript]
  • [ValidateSet]
  • [ValidateTrustedData]
  • [ValidateUserDrive]
  • [version]
  • [void]
  • [WildcardPattern]
  • [wmi]
  • [wmiclass]
  • [wmisearcher]
  • [X500DistinguishedName]
  • [X509Certificate]
  • [xml]

Разрешены только следующие типы объектов COM:

  • Scripting.Dictionary
  • Scripting.FileSystemObject
  • VBScript.RegExp

NoLanguage режим

Режим PowerShell полностью отключает язык сценариев PowerShell NoLanguage . Нельзя запускать скрипты или использовать переменные. Вы можете выполнять только собственные команды и командлеты.

Начиная с PowerShell 7.2 New-Object командлет отключен в NoLanguage режиме при настройке системной блокировки.

См. также