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
режиме при настройке системной блокировки.
См. также
PowerShell