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:

  1. Só funciona localmente em computadores Windows
  2. Requer que Windows PowerShell 5.1
  3. Opera em parâmetros de cmdlet serializados e valores de retorno, não em objetos vivos
  4. 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

Ver também