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:
- Работает локально на компьютерах Windows
- Требуется Windows PowerShell 5.1
- Работает с сериализованными параметрами командлетов и возвращаемыми значениями, а не с динамическими объектами
- Все модули, импортированные в Windows PowerShell сеансе удаленного взаимодействия, используют одно и то же пространство выполнения.
Keywords
about_Windows_PowerShell_Compatibility