about_Windows_PowerShell_Compatibility

Краткое описание

Описание функций совместимости Windows PowerShell для PowerShell 7.

Подробное описание

Если в манифесте модуля не указано, что модуль совместим с PowerShell Core, модули в %windir%\system32\WindowsPowerShell\v1.0\Modules папке загружаются в фоновом режиме Windows PowerShell процесса 5.1 с помощью функции совместимости Windows PowerShell.

Использование функции совместимости

При импорте первого модуля с помощью функции совместимости Windows PowerShell PowerShell создает удаленный сеанс с именем WinPSCompatSession , который выполняется в фоновом процессе Windows PowerShell 5.1. Этот процесс создается, когда функция совместимости импортирует первый модуль. Процесс закрывается при удалении последнего такого модуля (с помощью Remove-Module) или при завершении процесса PowerShell.

Модули, загруженные в сеансе WinPSCompatSession , используются через неявное удаленное взаимодействие и отражаются в текущем сеансе PowerShell. Это тот же метод транспорта, который используется для заданий PowerShell.

При импорте модуля в WinPSCompatSession сеанс неявное удаленное взаимодействие создает прокси-модуль в каталоге $env:Temp пользователя и импортирует этот прокси-модуль в текущий сеанс PowerShell. Это позволяет PowerShell определить, что модуль был загружен с помощью функции совместимости Windows PowerShell.

После создания сеанса его можно использовать для операций, которые неправильно работают с десериализованными объектами. Весь конвейер выполняется в Windows PowerShell и возвращается только окончательный результат. Пример:

$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
  "Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}

Функцию совместимости можно вызвать двумя способами:

  • Явным образом путем импорта модуля с помощью параметра UseWindowsPowerShell

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • Неявно путем импорта модуля Windows PowerShell по имени модуля, пути или автоматической загрузке с помощью обнаружения команд.

    Import-Module -Name ServerManager
    Get-AppLockerPolicy -Local
    

    Если модуль AppLocker еще не загружен, он автоматически загружается при запуске Get-AppLockerPolicy.

Windows PowerShell Совместимость блокирует загрузку модулей, перечисленных в параметре WindowsPowerShellCompatibilityModuleDenyList в файле конфигурации PowerShell.

Значение этого параметра по умолчанию:

"WindowsPowerShellCompatibilityModuleDenyList":  [
   "PSScheduledJob","BestPractices","UpdateServices"
]

Управление неявной загрузкой модулей

Чтобы отключить неявное поведение импорта функции совместимости Windows PowerShell, используйте DisableImplicitWinCompat параметр в файле конфигурации PowerShell. Этот параметр можно добавить в powershell.config.json файл . Дополнительные сведения см. в разделе about_powershell_config.

В этом примере показано, как создать файл конфигурации, который отключает функцию неявной загрузки модулей 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

Дополнительные сведения о совместимости модулей см. в списке совместимости модулей PowerShell 7 .

Управление clobbering командлетов

Функция совместимости Windows PowerShell использует неявное удаленное взаимодействие для загрузки модулей в режиме совместимости. В результате команды, экспортированные модулем, имеют приоритет над командами с тем же именем в текущем сеансе PowerShell 7. В выпуске PowerShell 7.0.0 были включены основные модули, поставляемые с PowerShell.

В PowerShell 7.1 поведение было изменено, чтобы следующие основные модули PowerShell не блокировались:

  • Microsoft.PowerShell.ConsoleHost
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management

В PowerShell 7.1 также добавлена возможность перечисления дополнительных модулей, которые не должны быть загроможированы в режиме совместимости.

Этот параметр можно добавить в WindowsPowerShellCompatibilityNoClobberModuleList файл конфигурации PowerShell. Значение этого параметра представляет собой разделенный запятыми список имен модулей. Значение этого параметра по умолчанию:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

Ограничения

Функции совместимости Windows PowerShell:

  1. Работает локально на компьютерах Windows
  2. Требуется Windows PowerShell 5.1
  3. Работает с сериализованными параметрами командлетов и возвращаемыми значениями, а не с динамическими объектами
  4. Все модули, импортированные в Windows PowerShell сеансе удаленного взаимодействия, используют одно и то же пространство выполнения.

Keywords

about_Windows_PowerShell_Compatibility

См. также раздел