about_Windows_PowerShell_Compatibility
Breve descrição
Descreve a funcionalidade de compatibilidade Windows PowerShell para o PowerShell 7.
Longa descrição
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 função de compatibilidade.
Utilizando a função de compatibilidade
Quando o primeiro módulo é importado utilizando Windows PowerShell função de compatibilidade, o PowerShell cria uma sessão remota com o nome WinPSCompatSession
que está a ser executada em segundo plano Windows PowerShell processo 5.1. Este processo é criado quando a funcionalidade de Compatibilidade importa o primeiro módulo. O processo é encerrado quando o último módulo é removido (utilizando Remove-Module
) ou quando o processo PowerShell sai.
Os módulos carregados na WinPSCompatSession
sessão são utilizados através de um remoing implícito e refletidos na sessão atual do PowerShell. Este é o mesmo método de transporte utilizado para os trabalhos da PowerShell.
Quando um módulo é importado para a sessão, o WinPSCompatSession
remoing implícito gera um módulo proxy no diretório do $env:Temp
utilizador e importa este módulo proxy para a sessão atual do PowerShell. Isto permite ao PowerShell detetar que o módulo foi carregado utilizando Windows PowerShell funcionalidade de compatibilidade.
Uma vez criada a sessão, pode ser usada para operações que não funcionam corretamente em objetos desercializados. Todo o gasoduto é executado em Windows PowerShell e apenas o resultado final é devolvido. Por exemplo:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
A função de compatibilidade pode ser invocada de duas formas:
Explicitamente importando um módulo usando o parâmetro UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Implicitamente importando um módulo Windows PowerShell pelo nome do módulo, caminho ou autocaragar através da descoberta do comando.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Se ainda não estiver carregado, o módulo AppLocker é carregado automaticamente quando funciona
Get-AppLockerPolicy
.
Windows PowerShell A compatibilidade bloqueia o carregamento de módulos listados na definição no WindowsPowerShellCompatibilityModuleDenyList
ficheiro de configuração PowerShell.
O valor predefinido desta definição é:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Gestão do carregamento de módulos implícitos
Para desativar o comportamento implícito de importação da função de compatibilidade Windows PowerShell, utilize a DisableImplicitWinCompat
definição num ficheiro de configuração PowerShell. Esta definição pode ser adicionada ao powershell.config.json
ficheiro. Para mais informações, consulte about_powershell_config.
Este exemplo mostra como criar um ficheiro de configuração que desativa a funcionalidade implícita de carregamento de módulos 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 do módulo PowerShell 7 .
Gestão do clobbering cmdlet
A função Windows PowerShell compatibilidade utiliza a amagem 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 com o mesmo nome na sessão atual do PowerShell 7. Na versão PowerShell 7.0.0, isto incluía os módulos centrais que enviam com PowerShell.
No PowerShell 7.1, o comportamento foi alterado de modo a que os seguintes módulos PowerShell do núcleo não sejam clobbered:
- 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 acrescentou a capacidade de listar módulos adicionais que não devem ser obstruídos pelo modo de compatibilidade.
Pode adicionar a WindowsPowerShellCompatibilityNoClobberModuleList
definição ao ficheiro de configuração PowerShell. O valor desta definição é uma lista separada por vírgulas de nomes de módulos. O valor predefinido desta definiçã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 de retorno, não em objetos vivos
- Todos os módulos importados para a sessão de remoing Windows PowerShell partilham o mesmo espaço de funcionação.
Palavras-chave
about_Windows_PowerShell_Compatibility