about_Language_Modes

Kurze Beschreibung

Erläutert Sprachmodi und deren Auswirkungen auf PowerShell-Sitzungen.

Lange Beschreibung

Der Sprachmodus einer PowerShell-Sitzung bestimmt, welche Elemente der PowerShell-Sprache in der Sitzung verwendet werden können.

PowerShell unterstützt die folgenden Sprachmodi:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (eingeführt in PowerShell 3.0)
  • NoLanguage

Was ist ein Sprachmodus?

Der Sprachmodus bestimmt die Sprachelemente, die in der Sitzung zulässig sind.

Der Sprachmodus ist eine Eigenschaft der Sitzungskonfiguration (oder "Endpunkt"), die zum Erstellen der Sitzung verwendet wird. Alle Sitzungen, die eine bestimmte Sitzungskonfiguration verwenden, verfügen über den Sprachmodus der Sitzungskonfiguration.

Alle PowerShell-Sitzungen verfügen über einen Sprachmodus. Sitzungen werden mithilfe der Sitzungskonfigurationen auf dem Zielcomputer erstellt. Der in der Sitzungskonfiguration festgelegte Sprachmodus bestimmt den Sprachmodus der Sitzung. Verwenden Sie zum Angeben der Sitzungskonfiguration einer PSSession den Parameter ConfigurationName von Cmdlets, die eine Sitzung erstellen.

Ab PowerShell 7.3 können Sie mit dem Parameter ConfigurationFile ausführenpwsh. Dadurch können Sie PowerShell mit einer bestimmten Konfiguration starten.

Suchen des Sprachmodus einer Sitzung

Sie können den Sprachmodus einer Sitzung oder ConstrainedLanguage einer FullLanguage Sitzung ermitteln, indem Sie den Wert der LanguageMode-Eigenschaft des Sitzungszustands abrufen.

Beispiel:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

In Sitzungen mit RestrictedLanguage den Modi und NoLanguage können Sie den Memberzugriffsoperator (.) jedoch nicht verwenden, um Eigenschaftswerte abzurufen. Stattdessen wird in der Fehlermeldung der Sprachmodus angezeigt.

Wenn Sie den $ExecutionContext.SessionState.LanguageMode Befehl in einer RestrictedLanguage Sitzung ausführen, gibt PowerShell die Fehlermeldungen PropertyReferenceNotSupportedInDataSection und VariableReferenceNotSupportedInDataSection zurück.

  • PropertyReferenceNotSupportedInDataSection: Eigenschaftenverweise sind im eingeschränkten Sprachmodus oder im Abschnitt Daten nicht zulässig.
  • VariableReferenceNotSupportedInDataSection: Eine Variable, auf die im eingeschränkten Sprachmodus nicht verwiesen werden kann, oder auf einen Abschnitt Data wird verwiesen.

Wenn Sie den $ExecutionContext.SessionState.LanguageMode Befehl in einer NoLanguage Sitzung ausführen, gibt PowerShell die Fehlermeldung ScriptsNotAllowed zurück.

  • ScriptsNotAllowed: Die Syntax wird von diesem Runspace nicht unterstützt. Dies liegt möglicherweise daran, dass es sich im Sprachmodus befindet.

Suchen des Sprachmodus einer Sitzungskonfiguration

Wenn eine Sitzungskonfiguration mithilfe einer Sitzungskonfigurationsdatei erstellt wird, verfügt die Sitzungskonfiguration über eine LanguageMode-Eigenschaft . Sie finden den Sprachmodus, indem Sie den Wert der LanguageMode-Eigenschaft abrufen.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

In anderen Sitzungskonfigurationen können Sie den Sprachmodus indirekt finden, indem Sie den Sprachmodus einer Sitzung ermitteln, die mit der Sitzungskonfiguration erstellt wird.

Festlegen des Sprachmodus

Der Sprachmodus in einer PowerShell-Sitzung $ExecutionContext kann über die integrierte Variable festgelegt werden.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Dies ist jedoch nur für das Experimentieren mit Sprachmodi nützlich. Sprachmodi sollen PowerShell-Sitzungen für bestimmte Kontexte zusätzliche Sicherheit bieten.

Sprachenmodi werden festgelegt, wenn Sie eine Systemanwendungssteuerungsrichtlinie verwenden oder eine Sitzungskonfiguration erstellen.

Verwenden einer Systemanwendungssteuerungsrichtlinie

PowerShell wird automatisch im ConstrainedLanguage Modus ausgeführt, wenn es unter einer Systemanwendungssteuerungsrichtlinie ausgeführt wird. Die erkannten Anwendungssteuerungsrichtlinien sind AppLocker und Windows Defender Anwendungssteuerung (WDAC) auf Windows-Plattformen.

PowerShell wendet neben den Sprachmodi andere Einschränkungen an, wenn eine Anwendungssteuerungsrichtlinie erkannt wird. Beispielsweise gibt es zusätzliche Einschränkungen für dot-sourcing und den Modulimport unter einer Richtlinie.

Wenn eine PowerShell-Sitzung unter einer Richtlinie gestartet wird, wird sie im ConstrainedLanguage Modus ausgeführt. Dieser Modus ermöglicht eine nutzbare interaktive Shellumgebung, während der Zugriff auf Features und APIs eingeschränkt wird, die von einem böswilligen Akteur missbraucht werden könnten. Benutzer können Cmdlets und native Befehle ausführen und haben Zugriff auf grundlegende Sprachelemente. Der Zugriff auf PowerShell-, .NET- und COM-APIs ist eingeschränkt.

Jedes skript- oder skriptbasierte Modul, das in dieser Sitzung ausgeführt wird, wird im ConstrainedLanguage Modus ausgeführt. Jedes skript- oder skriptbasierte Modul, das von der Richtlinie zugelassen wird, wird jedoch ohne Einschränkungen im FullLanguage Modus ausgeführt. Auf diese Weise kann ein durch eine Richtlinie gesperrtes System Über Skripts verfügen, die von der Richtlinie als vertrauenswürdig eingestuft werden und mit wenigen Einschränkungen ausgeführt werden.

Verwenden einer Sitzungskonfiguration

PowerShell-Remoting unterstützt optional das Erstellen benutzerdefinierter Sitzungskonfigurationen. Sie können den gewünschten Sprachmodus für diese benutzerdefinierte Konfiguration festlegen. PowerShell Just Enough Administration (JEA)-Konfigurationen verwenden NoLanguage den Modus, um Sitzungen nur auf Befehlsaufrufe zu beschränken. Mit JEA kann die Remotesitzung auf bestimmte Benutzer beschränkt werden. Die JEA-Benutzer sind auf die Ausführung eines definierten Befehlssatzes beschränkt und können nicht direkt auf APIs, das Dateisystem oder andere Systemressourcen zugreifen.

Weitere Informationen finden Sie unter JEA-Sitzungskonfigurationen und New-PSSessionConfigurationFile.

Features und Einschränkungen im Sprachmodus

In diesem Abschnitt werden die Sprachmodi in PowerShell-Sitzungen beschrieben.

FullLanguage Modus

Der FullLanguage Modus lässt alle Sprachelemente in der Sitzung zu. FullLanguage ist der Standardsprachmodus für Standardsitzungen unter allen Versionen von Windows.

RestrictedLanguage Modus

Der RestrictedLanguage Modus wurde für Windows RT erstellt, der nicht mehr unterstützt wird. Dieser Modus wird auch verwendet, um von geladene Import-ModuleModulmanifeste zu verarbeiten.

Im RestrictedLanguage Modus können Benutzer Befehle (Cmdlets, Funktionen, CIM-Befehle und Workflows) ausführen, aber keine Skriptblöcke verwenden.

Ab PowerShell 7.2 ist das New-Object Cmdlet im RestrictedLanguage Modus deaktiviert, wenn die Systemsperre konfiguriert ist.

Standardmäßig sind nur die folgenden Variablen im RestrictedLanguage Modus zulässig:

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

Modulmanifeste werden im RestrictedLanguage Modus geladen und können diese zusätzlichen Variablen verwenden:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures

Nur die folgenden Vergleichsoperatoren sind zulässig:

  • -eq (gleich)
  • -gt (größer als)
  • -lt (kleiner als)

Zuordnungsanweisungen, Eigenschaftenverweise und Methodenaufrufe sind nicht zulässig.

ConstrainedLanguage Modus

ConstrainedLanguage der Modus ist so konzipiert, dass grundlegende Sprachelemente wie Schleifen, Bedingungen, Zeichenfolgenerweiterung und Zugriff auf Objekteigenschaften zugelassen werden. Die Einschränkungen verhindern Vorgänge, die von einem böswilligen Akteur missbraucht werden könnten.

Der ConstrainedLanguage Modus lässt alle Cmdlets und eine Teilmenge der PowerShell-Sprachelemente zu, schränkt jedoch die Objekttypen ein, die verwendet werden können.

Die Features des ConstrainedLanguage Modus sind wie folgt:

  • Alle Cmdlets in Windows-Modulen sind voll funktionsfähig und haben vollständigen Zugriff auf Systemressourcen, außer wie erwähnt.
  • Alle Elemente der PowerShell-Skriptsprache sind zulässig.
  • Alle in Windows enthaltenen Module können importiert werden, und alle Befehle, die von den Modulen exportiert werden, werden in der Sitzung ausgeführt.
  • Das Add-Type Cmdlet kann signierte Assemblys laden, aber es kann keinen beliebigen C#-Code oder Win32-APIs laden.
  • Das New-Object Cmdlet kann nur für zulässige Typen verwendet werden (siehe unten).
  • In PowerShell können nur zulässige Typen verwendet werden. Andere Typen sind nicht zulässig. Die Typkonvertierung ist zulässig, aber nur, wenn das Ergebnis ein zulässiger Typ ist.
  • Cmdlet-Parameter, die Zeichenfolgeneingaben in Typen konvertieren, funktionieren nur, wenn der resultierende Typ ein zulässiger Typ ist.
  • Die ToString() -Methode und die .NET-Methoden der zulässigen Typen können aufgerufen werden.
  • Benutzer können alle Eigenschaften zulässiger Typen abrufen. Benutzer können die Werte von Eigenschaften nur für zulässige Typen festlegen.

Die folgenden .NET-Typen sind im ConstrainedLanguage Modus zulässig. Benutzer können Eigenschaften abrufen, Methoden aufrufen und Objekte in diese Typen konvertieren.

Zulässige 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]

Nur die folgenden COM-Objekttypen sind zulässig:

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

NoLanguage Modus

Im PowerShell-Modus NoLanguage wird die PowerShell-Skriptsprache vollständig deaktiviert. Sie können keine Skripts ausführen oder Variablen verwenden. Sie können nur native Befehle und Cmdlets ausführen.

Ab PowerShell 7.2 ist das New-Object Cmdlet im NoLanguage Modus deaktiviert, wenn die Systemsperre konfiguriert ist.

Siehe auch