about_Windows_PowerShell_Compatibility

Krótki opis

Zawiera opis funkcji zgodności 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 Windows PowerShell 5.1 przez funkcję zgodności Windows PowerShell.

Korzystanie z funkcji zgodność

Po zaimportowaniu pierwszego modułu przy użyciu funkcji zgodności Windows PowerShell program PowerShell tworzy sesję zdalną o nazwie WinPSCompatSession uruchomioną w tle Windows PowerShell 5.1 procesu. Ten proces jest tworzony, gdy funkcja zgodność importuje pierwszy moduł. Proces jest zamykany po usunięciu ostatniego takiego modułu (przy użyciu polecenia Remove-Module) lub zakończeniu procesu programu PowerShell.

Moduły załadowane w WinPSCompatSession sesji są używane za pośrednictwem niejawnej komunikacji zdalnej 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. Dzięki temu program PowerShell może wykryć, że moduł został załadowany przy użyciu funkcji zgodności Windows PowerShell.

Po utworzeniu sesji można jej użyć do operacji, które nie działają poprawnie na obiektach deserializacji. Cały potok jest wykonywany w 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ść 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 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, jest ładowany automatycznie po uruchomieniu polecenia Get-AppLockerPolicy.

Windows PowerShell Zgodność 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 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łów Windows PowerShell Compatibility.

$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 Windows PowerShell używa niejawnej komunikacji bezpośredniej do ładowania modułów w trybie zgodności. W rezultacie 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 uwzględniono 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 klonowane:

  • 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ść wyświetlania listy dodatkowych modułów, które nie powinny być clobbered przez tryb zgodności.

Ustawienie można dodać WindowsPowerShellCompatibilityNoClobberModuleList 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 Windows PowerShell:

  1. Działa tylko lokalnie na komputerach z systemem Windows
  2. Wymaga, aby Windows PowerShell 5.1
  3. Działa na serializowanych parametrach poleceń cmdlet i zwracanych wartościach, a nie na obiektach na żywo
  4. Wszystkie moduły zaimportowane do sesji komunikacji zdalniej Windows PowerShell współdzielą tę samą przestrzeń uruchomieniową.

Słowa kluczowe

about_Windows_PowerShell_Compatibility

Zobacz też