about_Windows_PowerShell_Compatibility
Kurze Beschreibung
Beschreibt die Windows PowerShell Kompatibilitätsfunktionalität für PowerShell 7.
Lange Beschreibung
Es sei denn, das Modulmanifest gibt an, dass das Modul mit PowerShell Core kompatibel ist, werden Module im %windir%\system32\WindowsPowerShell\v1.0\Modules
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 mit dem NamenWinPSCompatSession
, die in einem Hintergrund 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 (mithilfe von Remove-Module
) oder wenn Der PowerShell-Prozess beendet wird.
Die in der WinPSCompatSession
Sitzung geladenen Module werden über implizites Remoting verwendet und in die aktuelle PowerShell-Sitzung widergespiegelt. Dies ist die gleiche Transportmethode, die für PowerShell-Aufträge verwendet wird.
Wenn ein Modul in die WinPSCompatSession
Sitzung importiert wird, generiert implizites Remoting ein Proxymodul im Verzeichnis des $env:Temp
Benutzers und importiert dieses Proxymodul in die aktuelle PowerShell-Sitzung. Auf diese Weise kann PowerShell erkennen, dass das Modul mit Windows PowerShell Kompatibilitätsfunktionalität geladen wurde.
Sobald die Sitzung erstellt wurde, kann sie für Vorgänge verwendet werden, die nicht ordnungsgemäß für deserialisierte Objekte funktionieren. Die gesamte Pipeline wird in Windows PowerShell ausgeführt, und es wird nur das endgültige Ergebnis zurückgegeben. Zum 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 automatisches Laden über die 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 beim 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 ladens impliziten Moduls
Verwenden Sie die Einstellung in einer PowerShell-Konfigurationsdatei, um das DisableImplicitWinCompat
implizite Importverhalten des Features Windows PowerShell Kompatibilität zu deaktivieren. 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 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 PowerShell 7-Modulkompatibilitätsliste .
Verwalten von Cmdlet-Clobbering
Das Feature Windows PowerShell Kompatibilität verwendet implizites Remoting zum Laden von Modulen im Kompatibilitätsmodus. Das Ergebnis ist, dass von dem Modul exportierte Befehle Vorrang vor Befehlen desselben Namens in der aktuellen PowerShell 7-Sitzung haben. In der PowerShell 7.0.0-Version enthält dies die Kernmodule, die mit PowerShell ausgeliefert werden.
In PowerShell 7.1 wurde das Verhalten geändert, sodass die folgenden PowerShell-Kernmodule nicht geknäuscht 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 außerdem die Möglichkeit hinzugefügt, zusätzliche Module auflisten zu können, die nicht durch den Kompatibilitätsmodus verworfen werden sollten.
Sie können die Einstellung zur 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
- Betreibt serialisierte Cmdlet-Parameter und Rückgabewerte, nicht für Liveobjekte
- Alle in die Windows PowerShell Remotingsitzung importierten Module teilen denselben Runspace.
Keywords
about_Windows_PowerShell_Compatibility