Sdílet prostřednictvím


about_Language_Modes

Krátký popis

Vysvětluje režimy jazyka a jejich vliv na relace PowerShellu.

Dlouhý popis

Režim jazyka relace PowerShellu určuje, které prvky jazyka PowerShellu lze v relaci použít.

PowerShell podporuje následující režimy jazyka:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (zavedený v PowerShellu 3.0)
  • NoLanguage

Co je režim jazyka?

Režim jazyka určuje prvky jazyka, které jsou povoleny v relaci.

Režim jazyka je vlastnost konfigurace relace (neboli koncového bodu), která se používá k vytvoření relace. Všechny relace, které používají konkrétní konfiguraci relace, mají režim jazyka konfigurace relace.

Všechny relace PowerShellu mají režim jazyka. Relace se vytvářejí pomocí konfigurací relací v cílovém počítači. Režim jazyka nastavený v konfiguraci relace určuje režim jazyka relace. Pokud chcete zadat konfiguraci relace psSession, použijte parametr ConfigurationName rutin, které vytvářejí relaci.

Počínaje PowerShellem 7.3 můžete spustit pwsh s parametrem ConfigurationFile . To vám umožní spustit PowerShell pomocí konkrétní konfigurace.

Vyhledání jazykového režimu relace

Režim jazyka FullLanguage nebo ConstrainedLanguage relace můžete najít získáním hodnoty LanguageMode vlastnosti stavu relace.

Příklad:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Vrelacích RestrictedLanguage NoLanguage . Místo toho chybová zpráva odhalí režim jazyka.

Při spuštění $ExecutionContext.SessionState.LanguageMode příkazu v RestrictedLanguage relaci vrátí PowerShell chybové zprávy PropertyReferenceNotSupportedInDataSection a VariableReferenceNotSupportedInDataSection .

  • PropertyReferenceNotSupportedInDataSection: Odkazy na vlastnosti nejsou povoleny v režimu omezeného jazyka nebo v části Data.
  • VariableReferenceNotSupportedInDataSection: Proměnná, na kterou nelze odkazovat v režimu omezeného jazyka nebo na oddíl Data.

Při spuštění $ExecutionContext.SessionState.LanguageMode příkazu v NoLanguage relaci vrátí PowerShell chybovou zprávu ScriptsNotAllowed .

  • ScriptsNotAllowed: Tento runspace nepodporuje syntaxi. Důvodem může být to, že je v režimu bez jazyka.

Vyhledání jazykového režimu konfigurace relace

Při vytvoření konfigurace relace pomocí konfiguračního souboru relace má konfigurace relace vlastnost LanguageMode . Režim jazyka můžete najít získáním hodnoty LanguageMode vlastnost.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

V jiných konfiguracích relací můžete režim jazyka najít nepřímo vyhledáním jazykového režimu relace vytvořené pomocí konfigurace relace.

Nastavení jazykového režimu

Režim jazyka v relaci PowerShellu je možné nastavit prostřednictvím předdefinované $ExecutionContext proměnné.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

To je ale užitečné jenom pro experimentování s režimy jazyka. Jazykové režimy jsou určené k zajištění přidaného zabezpečení relací PowerShellu pro konkrétní kontexty.

Režimy jazyků se nastaví při použití zásad řízení systémových aplikací nebo vytvoření konfigurace relace.

Použití zásad řízení systémových aplikací

PowerShell se automaticky spustí v ConstrainedLanguage režimu, když běží v rámci zásad řízení systémových aplikací. Zjištěné zásady řízení aplikací jsou AppLocker a Windows Defender Application Control (WDAC) na platformách Windows.

PowerShell použije další omezení kromě režimů jazyka, když zjistí zásady řízení aplikací. Existují například další omezení pro import dot-sourcing a modulů v rámci zásad.

Když se spustí relace PowerShellu v rámci zásad, spustí se v ConstrainedLanguage režimu. Od PowerShellu 7.4 obsahuje úvodní banner zprávu, která indikuje, že je spuštěná v daném režimu. To umožňuje uživatelům používat použitelné interaktivní prostředí, spouštění rutin a nativní příkazy a také přístup k základním prvkům jazyka. Uživatel ale nemůže získat přístup k rozhraním API powershellu, .NET nebo com, která by mohla zneužít škodlivý aktér.

Jakýkoli skript nebo modul založený na skriptech spuštěný v této relaci běží v ConstrainedLanguage režimu. Jakýkoli skript nebo modul založený na skriptech povolených zásadou se však spouští v FullLanguage režimu bez jakýchkoli omezení. Díky tomu může mít systém uzamčený zásadami skripty, které zásady důvěřují, a spouštět s několika omezeními.

Použití konfigurace relace

Vzdálené komunikace PowerShellu volitelně podporuje vytváření vlastních konfigurací relací. Pro tuto vlastní konfiguraci můžete nastavit požadovaný režim jazyka. Konfigurace Just Enough Administration (JEA) v PowerShellu používají NoLanguage režim k omezení relací jenom na vyvolání příkazů. U funkce JEA je možné vzdálenou relaci omezit na konkrétní uživatele. Uživatelé JEA jsou omezeni na spuštění definované sady příkazů a nemají přímý přístup k rozhraním API, systému souborů nebo jiným systémovým prostředkům.

Další informace naleznete v tématu Konfigurace relace JEA a New-PSSessionConfigurationFile.

Funkce a omezení jazykového režimu

Tato část popisuje režimy jazyka v relacích PowerShellu.

FullLanguage režim

Režim FullLanguage umožňuje všechny prvky jazyka v relaci. FullLanguage je výchozí jazykový režim pro výchozí relace ve všech verzích Windows.

RestrictedLanguage režim

V RestrictedLanguage režimu můžou uživatelé spouštět příkazy (rutiny, funkce, příkazy CIM a pracovní postupy), ale nemůžou používat bloky skriptů. Tento režim se používá také ke zpracování manifestů modulů načtených .Import-Module

Počínaje PowerShellem 7.2 New-Object je rutina při RestrictedLanguage konfiguraci uzamčení systému v režimu zakázaná.

Ve výchozím nastavení jsou v RestrictedLanguage režimu povoleny pouze následující proměnné:

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

Manifesty modulů se načítají v RestrictedLanguage režimu a můžou používat tyto další proměnné:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Všechny proměnné prostředí, například $ENV:TEMP

Jsou povoleny pouze následující relační operátory:

  • -eq (rovno)
  • -gt (větší než)
  • -lt (menší než)

Příkazy přiřazení, odkazy na vlastnosti a volání metod nejsou povoleny.

ConstrainedLanguage režim

ConstrainedLanguage režim je navržený tak, aby umožňoval základní jazykové prvky, jako jsou smyčky, podmíněné výrazy, rozšíření řetězců a přístup k vlastnostem objektu. Omezení brání operacím, které by mohl zneužít škodlivý aktér.

Režim ConstrainedLanguage povoluje všechny rutiny a podmnožinu elementů jazyka PowerShellu, ale omezuje typy objektů, které je možné použít.

Funkce ConstrainedLanguage režimu jsou následující:

  • Všechny rutiny v modulech Windows jsou plně funkční a mají úplný přístup k systémovým prostředkům s výjimkou toho, jak je uvedeno.
  • Jsou povoleny všechny prvky skriptovacího jazyka PowerShellu.
  • Všechny moduly zahrnuté ve Windows je možné importovat a všechny příkazy, které moduly exportují v relaci.
  • Rutina Add-Type může načíst podepsaná sestavení, ale nemůže načíst libovolný kód jazyka C# nebo rozhraní API Win32.
  • Rutinu New-Object je možné použít jenom u povolených typů (uvedených níže).
  • V PowerShellu je možné použít jenom povolené typy. Jiné typy nejsou povolené. Převod typu je povolen, ale pouze v případě, že je výsledkem povolený typ.
  • Parametry rutiny, které převádějí řetězcový vstup na typy, fungují pouze v případech, kdy je výsledný typ povolený.
  • Metodu ToString() a metody .NET s povolenými typy lze vyvolat.
  • Uživatelé můžou získat všechny vlastnosti povolených typů. Uživatelé mohou nastavit hodnoty vlastností pouze u povolených typů.

V režimu jsou povoleny ConstrainedLanguage následující typy .NET. Uživatelé mohou získat vlastnosti, vyvolat metody a převést objekty na tyto typy.

Povolené typy:

  • [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]

Jsou povoleny pouze následující typy objektů MODELU COM:

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

NoLanguage režim

Režim PowerShellu úplně zakáže skriptovací jazyk PowerShellu NoLanguage . Nemůžete spouštět skripty ani používat proměnné. Můžete spouštět pouze nativní příkazy a rutiny.

Počínaje PowerShellem 7.2 New-Object je rutina při NoLanguage konfiguraci uzamčení systému v režimu zakázaná.

Viz také