about_Windows_PowerShell_Compatibility
Descrição breve
Descreve a funcionalidade de compatibilidade Windows PowerShell para o PowerShell 7.
Descrição longa
A menos que o manifesto do módulo indique que o módulo é compatível com o PowerShell Core, os %windir%\system32\WindowsPowerShell\v1.0\Modules
módulos na pasta são carregados em segundo plano Windows PowerShell processo 5.1 por Windows PowerShell recurso de Compatibilidade.
Usando o recurso de compatibilidade
Quando o primeiro módulo é importado usando Windows PowerShell recurso de compatibilidade, o PowerShell cria uma sessão remota chamada WinPSCompatSession
que está em execução em segundo plano Windows PowerShell processo 5.1. Esse processo é criado quando o recurso de compatibilidade importa o primeiro módulo. O processo é fechado quando o último módulo desse tipo é removido (usando Remove-Module
) ou quando o processo do PowerShell é encerrado.
Os módulos carregados na sessão são usados por meio de comunicação remota implícita e refletidos na sessão atual do WinPSCompatSession
PowerShell. Esse é o mesmo método de transporte usado para trabalhos do PowerShell.
Quando um módulo é importado para a sessão, a comunicação remota implícita gera um módulo proxy no diretório do usuário e importa esse módulo proxy para a WinPSCompatSession
sessão atual do $env:Temp
PowerShell. Isso permite que o PowerShell detecte que o módulo foi carregado usando Windows PowerShell funcionalidade de compatibilidade.
Depois que a sessão é criada, ela pode ser usada para operações que não funcionam corretamente em objetos desserializados. Todo o pipeline é executado em Windows PowerShell e apenas o resultado final é retornado. Por exemplo:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
O recurso de compatibilidade pode ser invocado de duas maneiras:
Importando explicitamente um módulo usando o parâmetro UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Implicitamente, importando um módulo Windows PowerShell por nome do módulo, caminho ou carregamento automático por meio da descoberta de comandos.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Se ainda não estiver carregado, o módulo AppLocker será carregado automaticamente quando você executar
Get-AppLockerPolicy
.
Windows PowerShell Compatibilidade bloqueia o carregamento de módulos listados na configuração no arquivo de configuração do WindowsPowerShellCompatibilityModuleDenyList
PowerShell.
O valor padrão dessa configuração é:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Gerenciando o carregamento implícito do módulo
Para desabilitar o comportamento de importação implícita do recurso de compatibilidade Windows PowerShell, use a DisableImplicitWinCompat
configuração em um arquivo de configuração do PowerShell. Essa configuração pode ser adicionada ao powershell.config.json
arquivo. Para obter mais informações, consulte about_powershell_config.
Este exemplo mostra como criar um arquivo de configuração que desabilita o recurso implícito de carregamento de módulo de Windows PowerShell Compatibilidade.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Para obter mais informações sobre a compatibilidade do módulo, consulte a lista de compatibilidade de módulos do PowerShell 7 .
Gerenciando o clobbering do cmdlet
O recurso de compatibilidade Windows PowerShell usa comunicação remota implícita para carregar módulos no modo de compatibilidade. O resultado é que os comandos exportados pelo módulo têm precedência sobre comandos de mesmo nome na sessão atual do PowerShell 7. Na versão do PowerShell 7.0.0, isso incluiu os módulos principais que são fornecidos com o PowerShell.
No PowerShell 7.1, o comportamento foi alterado para que os seguintes módulos principais do PowerShell não sejam ignorados:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
O PowerShell 7.1 também adicionou a capacidade de listar módulos adicionais que não devem ser substituídos pelo modo de compatibilidade.
Você pode adicionar a WindowsPowerShellCompatibilityNoClobberModuleList
configuração ao arquivo de configuração do PowerShell. O valor dessa configuração é uma lista separada por vírgulas de nomes de módulo. O valor padrão dessa configuração é:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Limitações
A funcionalidade de compatibilidade Windows PowerShell:
- Só funciona localmente em computadores Windows
- Requer que Windows PowerShell 5.1
- Opera em parâmetros de cmdlet serializados e valores retornados, não em objetos dinâmicos
- Todos os módulos importados para o Windows PowerShell sessão de comunicação remota compartilham o mesmo runspace.
Palavras-chave
about_Windows_PowerShell_Compatibility