about_Language_Modes

Krótki opis

Wyjaś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ęzyka ustawiony w konfiguracji sesji określa tryb językowy sesji. Aby określić konfigurację sesji sesji psSession, użyj parametru ConfigurationName poleceń cmdlet, które tworzą sesję.

Znajdowanie trybu językowego sesji

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

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 polecenia w RestrictedLanguage sesji program PowerShell zwraca komunikaty o błędach PropertyReferenceNotSupportedInDataSection i VariableReferenceNotSupportedInDataSection.$ExecutionContext.SessionState.LanguageMode

  • 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 ten obszar działania. 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 tryb języka można znaleźć 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ęzyka są przeznaczone do zapewnienia dodatkowego zabezpieczeń do 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 automatycznie uruchamiany w ConstrainedLanguage trybie, gdy jest uruchomiony w ramach zasad kontroli aplikacji systemowych. Wykryte zasady kontroli aplikacji to AppLocker i Windows Defender Application Control (WDAC) na platformach Windows.

Program PowerShell stosuje inne ograniczenia oprócz trybów języka podczas wykrywania zasad kontroli aplikacji. Istnieją na przykład dodatkowe ograniczenia dotyczące określania źródła kropk i importowania modułów w ramach zasad.

Po uruchomieniu sesji programu PowerShell w ramach zasad jest ona uruchamiana w ConstrainedLanguage trybie. Ten tryb umożliwia korzystanie z interaktywnego środowiska powłoki przy jednoczesnym ograniczeniu dostępu do funkcji i interfejsów API, które mogą być nadużywane przez złośliwego aktora. Użytkownicy mogą uruchamiać polecenia cmdlet i polecenia natywne oraz mieć dostęp do podstawowych elementów języka. Dostęp do interfejsów API programu PowerShell, platformy .NET i modelu COM jest ograniczony.

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. Dla tej konfiguracji niestandardowej można ustawić odpowiedni tryb językowy. Konfiguracje programu PowerShell Just Enough Administration (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 lub 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ęzyka w sesji. FullLanguage jest domyślnym trybem językowym dla domyślnych sesji we wszystkich wersjach systemu Windows.

RestrictedLanguage Tryb

Tryb RestrictedLanguage został utworzony dla Windows RT, który nie jest już obsługiwany. Ten tryb służy również do przetwarzania manifestów modułów załadowanych przez Import-Moduleprogram .

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.

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

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

  • -eq (równe)
  • -gt (większe niż)
  • -lt (mniejsze 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, rozszerzanie ciągów 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 podzbiór 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 wymienionych.
  • 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.
  • W przepływie pracy programu PowerShell można pisać i uruchamiać przepływy pracy skryptów (przepływy pracy napisane w języku programu PowerShell).
  • Przepływy pracy oparte na języku XAML nie są obsługiwane i nie można uruchamiać kodu XAML w przepływie pracy skryptu przy użyciu polecenia Invoke-Expression -Language XAML. Ponadto przepływy pracy nie mogą wywoływać innych przepływów pracy, chociaż zagnieżdżone przepływy pracy są dozwolone.
  • 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 dla 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 typ wynikowy 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ą ustawić 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]
  • [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]
  • [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 NoLanguage całkowicie wyłącza język skryptów programu PowerShell. 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 po skonfigurowaniu blokady systemu.

Zobacz też