Delen via


about_Language_Modes

Korte beschrijving

Hierin worden taalmodi en hun effect op PowerShell-sessies uitgelegd.

Lange beschrijving

De taalmodus van een PowerShell-sessie bepaalt welke elementen van de PowerShell-taal in de sessie kunnen worden gebruikt.

PowerShell ondersteunt de volgende taalmodi:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (geïntroduceerd in PowerShell 3.0)
  • NoLanguage

Wat is een taalmodus?

De taalmodus bepaalt de taalelementen die zijn toegestaan in de sessie.

De taalmodus is een eigenschap van de sessieconfiguratie (of 'eindpunt') die wordt gebruikt om de sessie te maken. Alle sessies die een bepaalde sessieconfiguratie gebruiken, hebben de taalmodus van de sessieconfiguratie.

Alle PowerShell-sessies hebben een taalmodus. Sessies worden gemaakt met behulp van de sessieconfiguraties op de doelcomputer. De taalmodus die is ingesteld in de sessieconfiguratie, bepaalt de taalmodus van de sessie. Als u de sessieconfiguratie van een PSSession wilt opgeven, gebruikt u de parameter ConfigurationName van cmdlets waarmee een sessie wordt gemaakt.

Vanaf PowerShell 7.3 kunt u uitvoeren pwsh met de parameter ConfigurationFile . Hierdoor kunt u PowerShell starten met behulp van een specifieke configuratie.

De taalmodus van een sessie zoeken

U kunt de taalmodus van een FullLanguage of-sessie ConstrainedLanguage vinden door de waarde van de eigenschap LanguageMode van de sessiestatus op te halen.

Bijvoorbeeld:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

In sessies met RestrictedLanguage en NoLanguage kunt u echter de operator lidtoegang (.) niet gebruiken om eigenschapswaarden op te halen. In plaats daarvan wordt in het foutbericht de taalmodus weergegeven.

Wanneer u de $ExecutionContext.SessionState.LanguageMode opdracht in een RestrictedLanguage sessie uitvoert, retourneert PowerShell de foutberichten PropertyReferenceNotSupportedInDataSection en VariableReferenceNotSupportedInDataSection .

  • PropertyReferenceNotSupportedInDataSection: Eigenschapverwijzingen zijn niet toegestaan in de beperkte taalmodus of in een sectie Gegevens.
  • VariableReferenceNotSupportedInDataSection: naar een variabele waarnaar niet kan worden verwezen in de beperkte taalmodus of naar een sectie Gegevens wordt verwezen.

Wanneer u de $ExecutionContext.SessionState.LanguageMode opdracht in een NoLanguage sessie uitvoert, retourneert PowerShell het foutbericht ScriptsNotAllowed .

  • ScriptsNotAllowed: de syntaxis wordt niet ondersteund door deze runspace. Dit kan komen doordat de modus geen taal wordt gebruikt.

De taalmodus van een sessieconfiguratie zoeken

Wanneer een sessieconfiguratie wordt gemaakt met behulp van een sessieconfiguratiebestand, heeft de sessieconfiguratie de eigenschap LanguageMode . U kunt de taalmodus vinden door de waarde van de eigenschap LanguageMode op te halen.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

In andere sessieconfiguraties kunt u de taalmodus indirect vinden door de taalmodus te zoeken van een sessie die is gemaakt met behulp van de sessieconfiguratie.

De taalmodus instellen

De taalmodus in een PowerShell-sessie kan worden ingesteld via de ingebouwde $ExecutionContext variabele.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Dit is echter alleen nuttig voor het experimenteren met taalmodi. Taalmodi zijn bedoeld om extra beveiliging te bieden voor PowerShell-sessies voor specifieke contexten.

Taalmodi worden ingesteld wanneer u een systeemtoepassingsbeheerbeleid gebruikt of een sessieconfiguratie maakt.

Een systeemtoepassingsbeheerbeleid gebruiken

PowerShell wordt automatisch uitgevoerd in ConstrainedLanguage de modus wanneer het wordt uitgevoerd onder een systeemtoepassingsbeheerbeleid. De gedetecteerde beleidsregels voor toepassingsbeheer zijn AppLocker en Windows Defender Application Control (WDAC) op Windows-platforms.

PowerShell past naast taalmodi andere beperkingen toe wanneer een beleid voor toepassingsbeheer wordt gedetecteerd. Er zijn bijvoorbeeld aanvullende beperkingen voor dot-sourcing en het importeren van modules onder een beleid.

Wanneer een PowerShell-sessie wordt gestart onder een beleid, wordt deze uitgevoerd in ConstrainedLanguage de modus. Deze modus biedt een bruikbare interactieve shell-ervaring terwijl de toegang wordt beperkt tot functies en API's die kunnen worden misbruikt door een kwaadwillende actor. Gebruikers kunnen cmdlets en systeemeigen opdrachten uitvoeren en toegang hebben tot basistaalelementen. Toegang tot PowerShell-, .NET- en COM-API's is beperkt.

Een script of module op basis van scripts die in deze sessie worden uitgevoerd, wordt uitgevoerd in ConstrainedLanguage de modus. Elk script of op scripts gebaseerde module die door het beleid is toegestaan, wordt echter zonder beperkingen uitgevoerd in FullLanguage de modus. Op deze manier kan een systeem dat is vergrendeld door beleid scripts hebben die worden vertrouwd door het beleid en worden uitgevoerd met enkele beperkingen.

Een sessieconfiguratie gebruiken

Externe communicatie van PowerShell biedt optioneel ondersteuning voor het maken van aangepaste sessieconfiguraties. U kunt de gewenste taalmodus voor die aangepaste configuratie instellen. Jea-configuraties (Just Enough Administration) in PowerShell gebruiken NoLanguage de modus om sessies te beperken tot alleen opdrachtinvocations. Met JEA kan de externe sessie worden beperkt tot specifieke gebruikers. De JEA-gebruikers zijn beperkt tot het uitvoeren van een gedefinieerde set opdrachten en hebben geen directe toegang tot API's, het bestandssysteem of andere systeembronnen.

Zie JEA-sessieconfiguraties en New-PSSessionConfigurationFile voor meer informatie.

Functies en beperkingen van de taalmodus

In deze sectie worden de taalmodi in PowerShell-sessies beschreven.

FullLanguage Modus

De FullLanguage modus staat alle taalelementen in de sessie toe. FullLanguage is de standaardtaalmodus voor standaardsessies in alle versies van Windows.

RestrictedLanguage Modus

In RestrictedLanguage de modus kunnen gebruikers opdrachten (cmdlets, functies, CIM-opdrachten en werkstromen) uitvoeren, maar kunnen ze geen scriptblokken gebruiken. Deze modus wordt ook gebruikt voor het verwerken van modulemanifesten die zijn geladen door Import-Module.

Vanaf PowerShell 7.2 wordt de cmdlet uitgeschakeld in RestrictedLanguage de New-Object modus wanneer systeemvergrendeling is geconfigureerd.

Standaard zijn alleen de volgende variabelen toegestaan in RestrictedLanguage de modus:

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

Modulemanifesten worden geladen in RestrictedLanguage de modus en kunnen gebruikmaken van deze aanvullende variabelen:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Omgevingsvariabelen, zoals $ENV:TEMP

Alleen de volgende vergelijkingsoperatoren zijn toegestaan:

  • -eq (gelijk aan)
  • -gt (groter-dan)
  • -lt (kleiner dan)

Toewijzingsinstructies, eigenschapsverwijzingen en methode-aanroepen zijn niet toegestaan.

ConstrainedLanguage Modus

ConstrainedLanguage de modus is ontworpen om basistaalelementen toe te staan, zoals lussen, voorwaarden, tekenreeksuitbreiding en toegang tot objecteigenschappen. De beperkingen voorkomen bewerkingen die kunnen worden misbruikt door een kwaadwillende actor.

De ConstrainedLanguage modus staat alle cmdlets en een subset van PowerShell-taalelementen toe, maar beperkt de objecttypen die kunnen worden gebruikt.

De functies van ConstrainedLanguage de modus zijn als volgt:

  • Alle cmdlets in Windows-modules zijn volledig functioneel en hebben volledige toegang tot systeembronnen, behalve zoals aangegeven.
  • Alle elementen van de PowerShell-scripttaal zijn toegestaan.
  • Alle modules die zijn opgenomen in Windows kunnen worden geïmporteerd en alle opdrachten die door de modules worden geëxporteerd, worden uitgevoerd in de sessie.
  • De Add-Type cmdlet kan ondertekende assembly's laden, maar kan geen willekeurige C#-code of Win32-API's laden.
  • De New-Object cmdlet kan alleen worden gebruikt voor toegestane typen (hieronder vermeld).
  • Alleen toegestane typen kunnen worden gebruikt in PowerShell. Andere typen zijn niet toegestaan. Typeconversie is toegestaan, maar alleen als het resultaat een toegestaan type is.
  • Cmdlet-parameters die tekenreeksinvoer converteren naar typen werken alleen als het resulterende type een toegestaan type is.
  • De ToString() methode en de .NET-methoden van toegestane typen kunnen worden aangeroepen.
  • Gebruikers kunnen alle eigenschappen van toegestane typen ophalen. Gebruikers kunnen de waarden van eigenschappen alleen instellen voor toegestane typen.

De volgende .NET-typen zijn toegestaan in ConstrainedLanguage de modus. Gebruikers kunnen eigenschappen ophalen, methoden aanroepen en objecten converteren naar deze typen.

Toegestane typen:

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

Alleen de volgende COM-objecttypen zijn toegestaan:

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

NoLanguage Modus

In de PowerShell-modus NoLanguage wordt de PowerShell-scripttaal volledig uitgeschakeld. U kunt geen scripts uitvoeren of variabelen gebruiken. U kunt alleen systeemeigen opdrachten en cmdlets uitvoeren.

Vanaf PowerShell 7.2 wordt de cmdlet uitgeschakeld in NoLanguage de New-Object modus wanneer systeemvergrendeling is geconfigureerd.

Zie ook