about_Windows_PowerShell_Compatibility
Krótki opis
Opisuje funkcje zgodności programu Windows PowerShell dla programu PowerShell 7.
Długi opis
Jeśli manifest modułu nie wskazuje, że moduł jest zgodny z programem PowerShell Core, moduły w %windir%\system32\WindowsPowerShell\v1.0\Modules
folderze są ładowane w tle w procesie środowiska Windows PowerShell 5.1 przez funkcję zgodności programu Windows PowerShell.
Korzystanie z funkcji zgodność
Po zaimportowaniu pierwszego modułu przy użyciu funkcji zgodności programu Windows PowerShell program PowerShell tworzy sesję zdalną o nazwie WinPSCompatSession
uruchamianą w tle proces programu Windows PowerShell 5.1. Program PowerShell tworzy ten proces, gdy funkcja zgodność importuje pierwszy moduł. Proces jest zamykany po usunięciu ostatniego modułu (przy użyciu Remove-Module
polecenia ) lub zakończeniu procesu programu PowerShell.
Moduły załadowane w sesji są używane za pośrednictwem niejawnej komunikacji zdalnej WinPSCompatSession
i odzwierciedlane w bieżącej sesji programu PowerShell. Jest to ta sama metoda transportu używana dla zadań programu PowerShell.
Po zaimportowaniu modułu WinPSCompatSession
do sesji niejawna komunikacja zdalna generuje moduł proxy w katalogu użytkownika $env:Temp
i importuje ten moduł proxy do bieżącej sesji programu PowerShell. Moduł proxy umożliwia programowi PowerShell wykrywanie, że moduł został załadowany przy użyciu funkcji zgodności programu Windows PowerShell.
Po utworzeniu sesji można jej użyć do operacji, które nie działają poprawnie na obiektach deserializowanych. Cały potok jest wykonywany w programie Windows PowerShell i zwracany jest tylko wynik końcowy. Na przykład:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
Funkcję Zgodności można wywołać na dwa sposoby:
Jawnie przez zaimportowanie modułu przy użyciu parametru UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Niejawnie przez zaimportowanie modułu programu Windows PowerShell według nazwy modułu, ścieżki lub automatycznego ładowania za pomocą odnajdywania poleceń.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Jeśli moduł AppLocker nie został jeszcze załadowany, zostanie załadowany automatycznie po uruchomieniu polecenia
Get-AppLockerPolicy
.
Zgodność programu Windows PowerShell blokuje ładowanie modułów wymienionych w ustawieniu w WindowsPowerShellCompatibilityModuleDenyList
pliku konfiguracji programu PowerShell.
Wartość domyślna tego ustawienia to:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Zarządzanie ładowaniem niejawnego modułu
Aby wyłączyć niejawne zachowanie importowania funkcji zgodności programu Windows PowerShell, użyj DisableImplicitWinCompat
ustawienia w pliku konfiguracji programu PowerShell. To ustawienie można dodać do powershell.config.json
pliku. Aby uzyskać więcej informacji, zobacz about_PowerShell_Config.
W tym przykładzie pokazano, jak utworzyć plik konfiguracji, który wyłącza niejawną funkcję ładowania modułu zgodności programu Windows PowerShell.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Aby uzyskać więcej informacji na temat zgodności modułów, zobacz listę zgodności modułów programu PowerShell 7.
Zarządzanie klonowaniem poleceń cmdlet
Funkcja zgodności programu Windows PowerShell używa niejawnej komunikacji zdalnej do ładowania modułów w trybie zgodności. Wynikiem jest to, że polecenia wyeksportowane przez moduł mają pierwszeństwo przed poleceniami o tej samej nazwie w bieżącej sesji programu PowerShell 7. W wersji programu PowerShell 7.0.0 zawiera to podstawowe moduły dostarczane za pomocą programu PowerShell.
W programie PowerShell 7.1 zachowanie zostało zmienione tak, aby następujące podstawowe moduły programu PowerShell nie były clobbered:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
Program PowerShell 7.1 dodał również możliwość wykluczania większej liczby modułów z klonowania przez tryb zgodności.
Możesz dodać WindowsPowerShellCompatibilityNoClobberModuleList
ustawienie do pliku konfiguracji programu PowerShell. Wartość tego ustawienia to rozdzielona przecinkami lista nazw modułów. Wartość domyślna tego ustawienia to:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Ograniczenia
Funkcja zgodności programu Windows PowerShell:
- Działa tylko lokalnie na komputerach z systemem Windows
- Wymaga programu Windows PowerShell 5.1
- Działa na serializowanych parametrach polecenia cmdlet i zwracanych wartościach, a nie na obiektach na żywo
- Udostępnia jedną przestrzeń uruchamiania dla wszystkich modułów zaimportowanych do sesji komunikacji zdalnej programu Windows PowerShell
Pliki tymczasowe
Funkcja zgodności programu Windows PowerShell używa niejawnej komunikacji zdalnej do udostępniania modułów programu Windows PowerShell 5.1 w programie PowerShell 7. Niejawna komunikacja zdalna tworzy pliki tymczasowe w $env:Temp
katalogu. Każdy moduł proxied jest przechowywany w osobnym folderze z następującą konwencją nazewnictwa:
remoteIpMoProxy_<ModuleName>_<ModuleVersion>_localhost_<SessionGuid>
.
Program PowerShell usuwa pliki tymczasowe po usunięciu ostatniego modułu proxied z sesji lub zamknięciu sesji.