about_Windows_PowerShell_Compatibility
Kurze Beschreibung
Beschreibt die Windows PowerShell Kompatibilitätsfunktionalität für PowerShell 7.
Lange Beschreibung
Sofern das Modulmanifest nicht angibt, dass das Modul mit PowerShell Core kompatibel ist, werden Module %windir%\system32\WindowsPowerShell\v1.0\Modules
im Ordner in einem Hintergrund Windows PowerShell 5.1-Prozess durch Windows PowerShell Kompatibilitätsfeature geladen.
Verwenden des Kompatibilitätsfeatures
Wenn das erste Modul mithilfe Windows PowerShell Kompatibilitätsfeatures importiert wird, erstellt PowerShell eine Remotesitzung namensWinPSCompatSession
, die in einem Hintergrundprozess Windows PowerShell 5.1-Prozess ausgeführt wird. Dieser Prozess wird erstellt, wenn das Kompatibilitätsfeature das erste Modul importiert. Der Prozess wird geschlossen, wenn das letzte solche Modul entfernt wird (mit Remove-Module
) oder wenn der PowerShell-Prozess beendet wird.
Die in die WinPSCompatSession
Sitzung geladenen Module werden über implizites Remoting verwendet und in der aktuellen PowerShell-Sitzung reflektiert. Dies ist die gleiche Transportmethode, die für PowerShell-Aufträge verwendet wird.
Wenn ein Modul in die Sitzung importiert wird, generiert implizites WinPSCompatSession
Remoting ein Proxymodul im Verzeichnis des $env:Temp
Benutzers und importiert dieses Proxymodul in die aktuelle PowerShell-Sitzung. Dadurch kann PowerShell erkennen, dass das Modul mit Windows PowerShell Kompatibilitätsfunktionalität geladen wurde.
Nachdem die Sitzung erstellt wurde, kann sie für Vorgänge verwendet werden, die bei deserialisierten Objekten nicht ordnungsgemäß funktionieren. Die gesamte Pipeline wird in Windows PowerShell ausgeführt, und nur das Endergebnis wird zurückgegeben. Beispiel:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
Das Kompatibilitätsfeature kann auf zwei Arten aufgerufen werden:
Explizit durch Importieren eines Moduls mithilfe des UseWindowsPowerShell-Parameters
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Implizit durch Importieren eines Windows PowerShell Moduls nach Modulname, Pfad oder automatischem Laden per Befehlsermittlung.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Falls noch nicht geladen, wird das AppLocker-Modul automatisch geladen, wenn Sie ausführen
Get-AppLockerPolicy
.
Windows PowerShell Kompatibilitätsblöcke das Laden von Modulen, die in der Einstellung in der WindowsPowerShellCompatibilityModuleDenyList
PowerShell-Konfigurationsdatei aufgeführt sind.
Der Standardwert dieser Einstellung lautet:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Verwalten des impliziten Ladens von Modulen
Um das implizite Importverhalten des Windows PowerShell Kompatibilitätsfeatures zu deaktivieren, verwenden Sie die DisableImplicitWinCompat
Einstellung in einer PowerShell-Konfigurationsdatei. Diese Einstellung kann der powershell.config.json
Datei hinzugefügt werden. Weitere Informationen finden Sie unter about_powershell_config.
In diesem Beispiel wird gezeigt, wie Sie eine Konfigurationsdatei erstellen, die das implizite Modulladefeature von Windows PowerShell Kompatibilität deaktiviert.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Weitere Informationen zur Modulkompatibilität finden Sie in der Kompatibilitätsliste für PowerShell 7-Module .
Verwalten des Klonens von Cmdlets
Die Windows PowerShell Kompatibilitätsfunktion verwendet implizites Remoting, um Module im Kompatibilitätsmodus zu laden. Das Ergebnis ist, dass vom Modul exportierte Befehle Vorrang vor Befehlen mit demselben Namen in der aktuellen PowerShell 7-Sitzung haben. In der Version PowerShell 7.0.0 umfasste dies die Kernmodule, die mit PowerShell ausgeliefert werden.
In PowerShell 7.1 wurde das Verhalten geändert, sodass die folgenden PowerShell-Kernmodule nicht geklont werden:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
PowerShell 7.1 hat auch die Möglichkeit hinzugefügt, zusätzliche Module aufzulisten, die nicht durch den Kompatibilitätsmodus geklont werden sollten.
Sie können die Einstellung der WindowsPowerShellCompatibilityNoClobberModuleList
PowerShell-Konfigurationsdatei hinzufügen. Der Wert dieser Einstellung ist eine durch Trennzeichen getrennte Liste von Modulnamen. Der Standardwert dieser Einstellung lautet:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Einschränkungen
Die Windows PowerShell Kompatibilitätsfunktionalität:
- Funktioniert nur lokal auf Windows-Computern
- Erfordert, dass Windows PowerShell 5.1
- Arbeitet mit serialisierten Cmdletparametern und Rückgabewerten, nicht mit Liveobjekten
- Alle Module, die in die Windows PowerShell Remotingsitzung importiert werden, verwenden den gleichen Runspace.
Schlüsselwörter
about_Windows_PowerShell_Compatibility