about_Language_Modes

Korte beschrijving

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

Lange beschrijving

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

PowerShell ondersteunt de volgende taalmodi:

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

WAT IS EEN TAALMODUS?

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

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

Alle PowerShell-sessies hebben een taalmodus, waaronder PSSessions die u maakt met behulp van de New-PSSession cmdlet, tijdelijke sessies die gebruikmaken van de parameter ComputerName en de standaardsessies die worden weergegeven wanneer u PowerShell start.

Externe sessies worden gemaakt met behulp van de sessieconfiguraties op de externe computer. 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 ConfigurationName-parameter van cmdlets die een sessie maken.

TAALMODI

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

VOLLEDIGE TAAL (FullLanguage)

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

Beperkte taal (RestrictedLanguage)

In de modus RestrictedLanguage kunnen gebruikers opdrachten uitvoeren (cmdlets, functies, CIM-opdrachten en werkstromen), maar mogen ze geen scriptblokken gebruiken.

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

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

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

Modulemanifesten, die de modus RestrictedLanguage gebruiken, maken ook de volgende aanvullende variabelen mogelijk:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures

Alleen de volgende vergelijkingsoperatoren zijn toegestaan:

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

Toewijzingsinstructies, eigenschapsverwijzingen en methode-aanroepen zijn niet toegestaan.

Geen taal (NoLanguage)

De NoLanguage-modus kan alleen worden gebruikt via de API. NoLanguage-modus betekent dat er geen scripttekst van een formulier is toegestaan. Dit sluit het gebruik van de AddScript() -methode uit die fragmenten van PowerShell-script verzendt om te worden geparseerd en uitgevoerd. U kunt alleen AddCommand() en AddParameter() gebruiken die niet door de parser gaan.

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

Beperkte taal (beperkte taal)

De modus ConstrainedLanguage staat alle cmdlets en alle PowerShell-taalelementen toe, maar beperkt toegestane typen.

De modus ConstrainedLanguage is ontworpen ter ondersteuning van User Mode Code Integrity (UMCI) op Windows RT. Het is de enige ondersteunde taalmodus op Windows RT, maar is beschikbaar op alle ondersteunde systemen.

UMCI beveiligt ARM-apparaten door alleen door Microsoft ondertekende en door Microsoft gecertificeerde apps te laten installeren op apparaten op basis van Windows RT. De beperkteLanguage-modus voorkomt dat gebruikers PowerShell gebruiken om UMCI te omzeilen of te schenden.

De functies van de modus ConstrainedLanguage zijn als volgt:

  • Alle cmdlets in Windows-modules en andere door UMCI goedgekeurde cmdlets zijn volledig functioneel en hebben volledige toegang tot systeembronnen, behalve zoals vermeld.

  • 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 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 (hieronder vermeld) kunnen worden gebruikt in PowerShell. Andere typen zijn niet toegestaan.

  • Typeconversie is toegestaan, maar alleen wanneer het resultaat een toegestaan type is.

  • Cmdlet-parameters waarmee tekenreeksinvoer wordt geconverteerd naar typen, werken alleen wanneer het resulterende type een toegestaan type is.

  • De ToString() methode en de .NET-methoden van toegestane typen (hieronder vermeld) kunnen worden aangeroepen. Andere methoden kunnen niet worden aangeroepen.

  • Gebruikers kunnen alle eigenschappen van toegestane typen ophalen. Gebruikers kunnen de waarden van eigenschappen alleen instellen voor kerntypen. Alleen de volgende COM-objecten zijn toegestaan:

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

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

Toegestane typen:

  • AliasAttribute
  • AllowEmptyCollectionAttribute
  • AllowEmptyStringAttribute
  • AllowNullAttribute
  • Matrix
  • Booleaanse waarde
  • byte
  • char
  • CmdletBindingAttribute
  • DateTime
  • decimal
  • DirectoryEntry
  • DirectorySearcher
  • double
  • float
  • Guid
  • Hashtable
  • int
  • Int16
  • long
  • ManagementClass
  • ManagementObject
  • ManagementObjectSearcher
  • NullString
  • OutputTypeAttribute
  • ParameterAttribute
  • PSCredential
  • PSDefaultValueAttribute
  • PSListModifier
  • PSObject
  • PSPrimitiveDictionary
  • PSReference
  • PSTypeNameAttribute
  • Regex
  • SByte
  • tekenreeks
  • SupportsWildcardsAttribute
  • SwitchParameter
  • System.Globalization.CultureInfo
  • System.Net.IPAddress
  • System.Net.Mail.MailAddress
  • System.Numerics.BigInteger
  • System.Security.SecureString
  • TimeSpan
  • UInt16
  • UInt32
  • UInt64

De taalmodus van een sessieconfiguratie zoeken

Wanneer een sessieconfiguratie wordt gemaakt met behulp van een sessieconfiguratiebestand, heeft de sessieconfiguratie een LanguageMode-eigenschap. 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 vinden van een sessie die is gemaakt met de sessieconfiguratie.

Notitie

Sessieconfiguraties zijn een functie van externe communicatie met PowerShell op basis van WSMan. Ze worden alleen gebruikt wanneer u de New-PSSession, Invoke-Commandof Enter-PSSession cmdlets gebruikt om verbinding te maken met een externe Windows-computer. De Get-PSSessionConfiguration cmdlet is alleen beschikbaar op Windows-computers.

De taalmodus van een sessie zoeken

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

Bijvoorbeeld:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

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

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

  • PropertyReferenceNotSupportedInDataSection: Eigenschapsverwijzingen zijn niet toegestaan in de modus voor beperkte taal of in een sectie Gegevens.
  • VariableReferenceNotSupportedInDataSection: er wordt verwezen naar een variabele waarnaar niet kan worden verwezen in de modus met beperkte taal of naar een sectie Gegevens.

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

  • ScriptsNotAllowed: De syntaxis wordt niet ondersteund door deze runspace. Dit komt mogelijk doordat deze zich in de modus zonder taal bevindt.

Zie ook