Udostępnij za pośrednictwem


about_Language_Modes

Krótki opis

Objaśnia tryby języka i ich wpływ na sesje programu PowerShell.

Długi opis

Tryb językowy sesji programu PowerShell określa, które elementy języka programu PowerShell mogą być używane w sesji.

Program PowerShell obsługuje następujące tryby językowe:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (wprowadzone w programie PowerShell 3.0)
  • NoLanguage

Co to jest tryb językowy?

Tryb języka określa elementy języka, które są dozwolone w sesji.

Tryb językowy jest właściwością konfiguracji sesji (lub "punktu końcowego"), która jest używana do tworzenia sesji. Wszystkie sesje korzystające z określonej konfiguracji sesji mają tryb językowy konfiguracji sesji.

Wszystkie sesje programu PowerShell mają tryb językowy. Sesje są tworzone przy użyciu konfiguracji sesji na komputerze docelowym. Tryb językowy ustawiony w konfiguracji sesji określa tryb językowy sesji. Aby określić konfigurację sesji programu PSSession, użyj parametru ConfigurationName poleceń cmdlet, które tworzą sesję.

Począwszy od programu PowerShell 7.3, można uruchomić pwsh polecenie z parametrem ConfigurationFile . Dzięki temu można uruchomić program PowerShell przy użyciu określonej konfiguracji.

Znajdowanie trybu językowego sesji

Tryb języka FullLanguage lub ConstrainedLanguage sesji można znaleźć, uzyskując wartość właściwości LanguageMode stanu sesji.

Na przykład:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Jednak w sesjach z trybami RestrictedLanguage i NoLanguage nie można użyć operatora dostępu do składowych (.), aby uzyskać wartości właściwości. Zamiast tego komunikat o błędzie wyświetla tryb języka.

Po uruchomieniu $ExecutionContext.SessionState.LanguageMode polecenia w RestrictedLanguage sesji program PowerShell zwraca komunikaty o błędach PropertyReferenceNotSupportedInDataSection i VariableReferenceNotSupportedInDataSection .

  • PropertyReferenceNotSupportedInDataSection: odwołania do właściwości nie są dozwolone w trybie języka z ograniczeniami ani w sekcji Dane.
  • VariableReferenceNotSupportedInDataSection: zmienna, do którego nie można odwoływać się w trybie języka z ograniczeniami lub do sekcji Dane jest przywoływana.

Po uruchomieniu $ExecutionContext.SessionState.LanguageMode polecenia w NoLanguage sesji program PowerShell zwraca komunikat o błędzie ScriptsNotAllowed .

  • ScriptsNotAllowed: składnia nie jest obsługiwana przez tę przestrzeń uruchomieniową. Może to być spowodowane tym, że jest w trybie bez języka.

Znajdowanie trybu językowego konfiguracji sesji

Po utworzeniu konfiguracji sesji przy użyciu pliku konfiguracji sesji konfiguracja sesji ma właściwość LanguageMode . Tryb języka można znaleźć, uzyskując wartość właściwości LanguageMode .

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

W innych konfiguracjach sesji można znaleźć tryb języka pośrednio, wyszukując tryb językowy sesji utworzonej przy użyciu konfiguracji sesji.

Ustawianie trybu językowego

Tryb językowy w sesji programu PowerShell można ustawić za pomocą wbudowanej $ExecutionContext zmiennej.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Jednak jest to przydatne tylko w przypadku eksperymentowania z trybami języka. Tryby językowe mają zapewnić dodatkowe zabezpieczenia sesji programu PowerShell dla określonych kontekstów.

Tryby języków są ustawiane podczas korzystania z zasad sterowania aplikacjami systemowymi lub tworzenia konfiguracji sesji.

Korzystanie z zasad kontroli aplikacji systemowych

Program PowerShell jest uruchamiany automatycznie w ConstrainedLanguage trybie, gdy jest uruchomiony w ramach zasad kontroli aplikacji systemowych. Wykryte zasady sterowania aplikacjami to AppLocker i Windows Defender Application Control (WDAC) na platformach Windows.

Program PowerShell stosuje inne ograniczenia oprócz trybów językowych, gdy wykryje zasady kontroli aplikacji. Istnieją na przykład dodatkowe ograniczenia dotyczące określania źródła kropkowego i importowania modułów w ramach zasad.

Po uruchomieniu sesji programu PowerShell w ramach zasad jest ona uruchamiana w ConstrainedLanguage trybie. Począwszy od programu PowerShell 7.4, wyświetlany baner uruchamiania zawiera komunikat wskazujący, że działa w tym trybie. Dzięki temu użytkownicy mogą korzystać z interaktywnego środowiska powłoki, uruchamiać polecenia cmdlet i polecenia natywne, a także uzyskiwać dostęp do podstawowych elementów języka. Użytkownik nie może jednak uzyskać dostępu do interfejsów API programu PowerShell, platformy .NET ani com, które mogą być nadużywane przez złośliwego aktora.

Każdy skrypt lub moduł oparty na skryptach wykonywany w tej sesji jest uruchamiany w ConstrainedLanguage trybie. Jednak każdy skrypt lub moduł oparty na skryptach dozwolony przez zasady działa w FullLanguage trybie bez żadnych ograniczeń. Dzięki temu system zablokowany przez zasady może mieć skrypty, które są zaufane przez zasady i uruchamiane z kilkoma ograniczeniami.

Korzystanie z konfiguracji sesji

Komunikacja zdalna programu PowerShell opcjonalnie obsługuje tworzenie niestandardowych konfiguracji sesji. Możesz ustawić odpowiedni tryb językowy dla tej niestandardowej konfiguracji. Konfiguracje programu PowerShell Just Enough Administracja istration (JEA) używają NoLanguage trybu, aby ograniczyć sesje tylko do wywołań poleceń. W przypadku usługi JEA sesja zdalna może być ograniczona do określonych użytkowników. Użytkownicy JEA są ograniczeni do uruchamiania zdefiniowanego zestawu poleceń i nie mogą bezpośrednio uzyskiwać dostępu do interfejsów API, systemu plików ani innych zasobów systemowych.

Aby uzyskać więcej informacji, zobacz Konfiguracje sesji JEA i New-PSSessionConfigurationFile.

Funkcje i ograniczenia trybu językowego

W tej sekcji opisano tryby języka w sesjach programu PowerShell.

FullLanguage Tryb

Tryb FullLanguage zezwala na wszystkie elementy językowe w sesji. FullLanguage to domyślny tryb językowy dla sesji domyślnych we wszystkich wersjach systemu Windows.

RestrictedLanguage Tryb

W RestrictedLanguage trybie użytkownicy mogą uruchamiać polecenia (polecenia cmdlet, funkcje, polecenia CIM i przepływy pracy), ale nie mogą używać bloków skryptów. Ten tryb jest również używany do przetwarzania manifestów modułów załadowanych przez Import-Moduleprogram .

Począwszy od programu PowerShell 7.2, New-Object polecenie cmdlet jest wyłączone w RestrictedLanguage trybie podczas konfigurowania blokady systemu.

Domyślnie tylko następujące zmienne są dozwolone w RestrictedLanguage trybie:

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

Manifesty modułów są ładowane w RestrictedLanguage trybie i mogą używać następujących dodatkowych zmiennych:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Dowolne zmienne środowiskowe, takie jak $ENV:TEMP

Dozwolone są tylko następujące operatory porównania:

  • -eq (równe)
  • -gt (większe niż)
  • -lt (mniej niż)

Instrukcje przypisania, odwołania do właściwości i wywołania metod nie są dozwolone.

ConstrainedLanguage Tryb

ConstrainedLanguage Tryb jest przeznaczony do zezwalania na podstawowe elementy języka, takie jak pętle, warunkowe, rozszerzenie ciągu i dostęp do właściwości obiektu. Ograniczenia uniemożliwiają operacje, które mogą być nadużywane przez złośliwego aktora.

Tryb ConstrainedLanguage zezwala na wszystkie polecenia cmdlet i podzestaw elementów języka programu PowerShell, ale ogranicza typy obiektów, które mogą być używane.

Funkcje ConstrainedLanguage trybu są następujące:

  • Wszystkie polecenia cmdlet w modułach systemu Windows są w pełni funkcjonalne i mają pełny dostęp do zasobów systemowych, z wyjątkiem zanotowania.
  • Dozwolone są wszystkie elementy języka skryptów programu PowerShell.
  • Wszystkie moduły zawarte w systemie Windows można zaimportować i wszystkie polecenia eksportowane przez moduły są uruchamiane w sesji.
  • Polecenie Add-Type cmdlet może załadować podpisane zestawy, ale nie może załadować dowolnego kodu w języku C# ani interfejsów API Win32.
  • Polecenia New-Object cmdlet można używać tylko w przypadku dozwolonych typów (wymienionych poniżej).
  • W programie PowerShell można używać tylko dozwolonych typów. Inne typy nie są dozwolone. Konwersja typu jest dozwolona, ale tylko wtedy, gdy wynik jest dozwolonym typem.
  • Parametry polecenia cmdlet, które konwertują dane wejściowe ciągu na typy, działają tylko wtedy, gdy wynikowy typ jest dozwolonym typem.
  • Metody ToString() i metody .NET dozwolonych typów można wywołać.
  • Użytkownicy mogą uzyskać wszystkie właściwości dozwolonych typów. Użytkownicy mogą ustawiać wartości właściwości tylko dla dozwolonych typów.

Następujące typy platformy .NET są dozwolone w ConstrainedLanguage trybie. Użytkownicy mogą pobierać właściwości, wywoływać metody i konwertować obiekty na te typy.

Dozwolone 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]

Dozwolone są tylko następujące typy obiektów COM:

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

NoLanguage Tryb

Tryb programu PowerShell wyłącza całkowicie język skryptów programu PowerShell NoLanguage . Nie można uruchamiać skryptów ani używać zmiennych. Można uruchamiać tylko natywne polecenia i polecenia cmdlet.

Począwszy od programu PowerShell 7.2, New-Object polecenie cmdlet jest wyłączone w NoLanguage trybie podczas konfigurowania blokady systemu.

Zobacz też