Partilhar via


Migrating from Windows PowerShell 5.1 to PowerShell 7 (Migrar do Windows PowerShell 5.1 para o PowerShell 7)

Projetado para ambientes de nuvem, locais e híbridos, o PowerShell 7 está repleto de aprimoramentos e novos recursos.

  • Instala e executa lado a lado com o Windows PowerShell
  • Compatibilidade aprimorada com módulos existentes do Windows PowerShell
  • Novos recursos linguísticos, como operadores ternários e ForEach-Object -Parallel
  • Desempenho melhorado
  • Remotização baseada em SSH
  • Interoperabilidade entre plataformas
  • Suporte para contêineres Docker

O PowerShell 7 funciona lado a lado com o Windows PowerShell, permitindo que você teste e compare facilmente entre edições antes da implantação. A migração é simples, rápida e segura.

O PowerShell 7 é suportado nos seguintes sistemas operacionais Windows:

  • Windows 10 e 11
  • Windows Server 2016, 2019 e 2022

O PowerShell 7 também é executado no macOS e em várias distribuições Linux. Para obter uma lista de sistemas operacionais suportados e informações sobre o ciclo de vida do suporte, consulte o PowerShell Support Lifecycle.

Instalando o PowerShell 7

Para flexibilidade e suporte às necessidades de TI, engenheiros de DevOps e desenvolvedores, há várias opções disponíveis para instalar o PowerShell 7. Na maioria dos casos, as opções de instalação podem ser reduzidas aos seguintes métodos:

  • Implantar o PowerShell usando o pacote MSI
  • Implantar o PowerShell usando o pacote ZIP

Observação

O pacote MSI pode ser implantado e atualizado com produtos de gerenciamento, como Microsoft Configuration Manager. Baixe os pacotes partir da página de lançamento do GitHub.

A implantação do pacote MSI requer permissão de administrador. O pacote ZIP pode ser implantado por qualquer usuário. O pacote ZIP é a maneira mais fácil de instalar o PowerShell 7 para teste, antes de se comprometer com uma instalação completa.

Você também pode instalar o PowerShell 7 por meio da Windows Store ou winget. Para obter mais informações sobre esses dois métodos, consulte as instruções detalhadas em Instalando o PowerShell no Windows.

Usando o PowerShell 7 lado a lado com o Windows PowerShell 5.1

O PowerShell 7 foi projetado para coexistir com o Windows PowerShell 5.1. Os recursos a seguir garantem que seu investimento no PowerShell esteja protegido e que sua migração para o PowerShell 7 seja simples.

  • Separar caminho de instalação do nome do executável
  • PSModulePath separado
  • Perfis separados para cada versão
  • Compatibilidade melhorada dos módulos
  • Novos pontos finais de comunicação remota
  • Suporte à política de grupo
  • Logs de eventos separados

Diferenças nas versões do .NET

O PowerShell 7.4 é baseado no .NET 8.0. O Windows PowerShell 5.1 é baseado no .NET Framework 4.x. As diferenças entre as versões do .NET podem afetar o comportamento de seus scripts, especialmente se você estiver chamando o método .NET diretamente. Para obter mais informações, Diferenças entre o Windows PowerShell 5.1 e o PowerShell 7.x.

Separar caminho de instalação e nome do executável

O PowerShell 7 é instalado em um novo diretório, permitindo a execução lado a lado com o Windows PowerShell 5.1.

Locais de instalação por versão:

  • Windows PowerShell 5.1: $Env:windir\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x: $Env:ProgramFiles\PowerShell\6
  • PowerShell 7: $Env:ProgramFiles\PowerShell\7

O novo local é adicionado ao seu PATH permitindo que você execute o Windows PowerShell 5.1 e o PowerShell 7. Se você estiver migrando do PowerShell 6.x para o PowerShell 7, o PowerShell 6 será removido e o PATH substituído.

No Windows PowerShell, o executável do PowerShell é chamado powershell.exe. Na versão 6 e superior, o executável é nomeado pwsh.exe. O novo nome facilita o suporte à execução lado a lado de ambas as versões.

PSModulePath separado

Por padrão, o Windows PowerShell e o PowerShell 7 armazenam módulos em locais diferentes. O PowerShell 7 combina esses locais na variável de $Env:PSModulePath ambiente. Ao importar um módulo pelo nome, o PowerShell verifica o local especificado pelo $Env:PSModulePath. Isso permite que o PowerShell 7 carregue os módulos Core e Desktop.

Instalar Escopo Windows PowerShell 5.1 PowerShell 7.0
Módulos do PowerShell $Env:windir\system32\WindowsPowerShell\v1.0\Modules $Env:ProgramFiles\PowerShell\7\Modules
Instalado pelo utilizador
Âmbito de aplicação de todos os utilizadores
$Env:ProgramFiles\WindowsPowerShell\Modules $Env:ProgramFiles\PowerShell\Modules
Instalado pelo utilizador
Alcance do UtilizadorAtual
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

Os exemplos a seguir mostram os valores padrão de $Env:PSModulePath para cada versão.

  • Para o Windows PowerShell 5.1:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    
  • Para o PowerShell 7:

    $Env:PSModulePath -split (';')
    
    C:\Users\<user>\Documents\PowerShell\Modules
    C:\Program Files\PowerShell\Modules
    C:\Program Files\PowerShell\7\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
    

Observe que o PowerShell 7 inclui os caminhos do Windows PowerShell e os caminhos do PowerShell 7 para fornecer carregamento automático de módulos.

Observação

Caminhos adicionais podem existir se você tiver alterado a variável de ambiente PSModulePath ou instalado módulos ou aplicativos personalizados.

Para obter mais informações, consulte about_PSModulePath.

Para obter mais informações sobre módulos, consulte about_Modules.

Perfis separados

Um perfil do PowerShell é um script que é executado quando o PowerShell é iniciado. Esse script personaliza seu ambiente adicionando comandos, aliases, funções, variáveis, módulos e unidades do PowerShell. O script de perfil disponibiliza essas personalizações em todas as sessões sem precisar recriá-las manualmente.

O caminho para o local do perfil foi alterado no PowerShell 7.

  • Em Windows PowerShell 5.1, o local do perfil é $HOME\Documents\WindowsPowerShell.
  • No PowerShell 7, o local do perfil é $HOME\Documents\PowerShell.

Os nomes dos arquivos de perfil também foram alterados:

$PROFILE | Select-Object *Host* | Format-List
 AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
 AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
 CurrentUserAllHosts    : C:\Users\<user>\Documents\PowerShell\profile.ps1
 CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

Para mais informações, about_Profiles.

Compatibilidade do PowerShell 7 com módulos do Windows PowerShell 5.1

A maioria dos módulos usados no Windows PowerShell 5.1 já funciona com o PowerShell 7, incluindo o Azure PowerShell e o Ative Directory. Continuamos a trabalhar com outras equipes para adicionar suporte nativo ao PowerShell 7 para mais módulos, incluindo Microsoft Graph, Office 365 e outros. Para obter a lista atual de módulos suportados, consulte a compatibilidade de módulos do PowerShell 7 .

Observação

No Windows, também adicionamos um UseWindowsPowerShell alternar para Import-Module para facilitar a transição para o PowerShell 7 para aqueles que usam módulos incompatíveis. Para obter mais informações sobre essa funcionalidade, consulte about_Windows_PowerShell_Compatibility.

Comunicação remota do PowerShell

A comunicação remota do PowerShell permite executar qualquer comando do PowerShell em um ou mais computadores remotos. Você pode estabelecer conexões persistentes, iniciar sessões interativas e executar scripts em computadores remotos.

WS-Management comunicação remota

O Windows PowerShell 5.1 e versões posteriores usam o protocolo WS-Management (WSMAN) para negociação de conexão e transporte de dados. O Gerenciamento Remoto do Windows (WinRM) usa o protocolo WSMAN. Se o WinRM tiver sido habilitado, o PowerShell 7 usará o ponto de extremidade existente do Windows PowerShell 5.1 chamado Microsoft.PowerShell para conexões remotas. Para atualizar o PowerShell 7 para incluir o seu próprio endpoint, execute o cmdlet Enable-PSRemoting. Para obter informações sobre como se conectar a pontos de extremidade específicos, consulte WS-Management comunicação remota no PowerShell

Para usar a comunicação remota do Windows PowerShell, o computador remoto deve ser configurado para gerenciamento remoto. Para obter mais informações, incluindo instruções, consulte Sobre requisitos remotos.

Para obter mais informações sobre como trabalhar com comunicação remota, consulte Sobre o Remote

Comunicação remota baseada em SSH

A comunicação remota baseada em SSH foi adicionada ao PowerShell 6.x para oferecer suporte a outros sistemas operacionais que não podem usar componentes nativos do Windows, como WinRM. A comunicação remota SSH cria um processo anfitrião do PowerShell no computador de destino como um subsistema SSH. Para obter detalhes e exemplos sobre como configurar a comunicação remota baseada em SSH no Windows ou Linux, consulte: comunicação remota do PowerShell sobre SSH.

Observação

A Galeria do PowerShell (PSGallery) contém um módulo e cmdlet que configura automaticamente a comunicação remota baseada em SSH. Instale o módulo Microsoft.PowerShell.RemotingTools a partir do PSGallery do e execute o cmdlet Enable-SSH.

Os cmdlets New-PSSession, Enter-PSSessione Invoke-Command têm novos conjuntos de parâmetros para dar suporte a conexões SSH.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Para criar uma sessão remota, especifique o computador de destino com o parâmetro HostName e forneça ao nome de usuário UserName. Ao executar os cmdlets interativamente, será solicitada uma senha.

Enter-PSSession -HostName <Computer> -UserName <Username>

Como alternativa, ao usar o parâmetro HostName, forneça as informações do nome de usuário seguidas pelo sinal de arroba (@), seguido pelo nome do computador.

Enter-PSSession -HostName <Username>@<Computer>

Você pode configurar a autenticação de chave SSH usando um arquivo de chave privada com o parâmetro KeyFilePath. Para obter mais informações, consulte de gerenciamento de chaves OpenSSH .

Política de Grupo suportada

O PowerShell inclui configurações de Política de Grupo para ajudá-lo a definir valores de opção consistentes para servidores em um ambiente corporativo. Essas configurações incluem:

  • Configuração da sessão de console: define um ponto de extremidade de configuração no qual o PowerShell é executado.
  • Ativar o Registo de Logs dos Módulos: define a propriedade LogPipelineExecutionDetails dos módulos.
  • Ativar o Registo de Bloco de Scripts do PowerShell: ativa o registo detalhado de todos os scripts do PowerShell.
  • Ativar Execução de Script: define a política de execução do PowerShell.
  • Ativar a transcrição do PowerShell: permite capturar a entrada e a saída de comandos do PowerShell em transcrições baseadas em texto.
  • Defina o caminho de origem padrão para Atualização da Ajuda: define a fonte da Ajuda atualizável como um diretório, e não a Internet.

Para obter mais informações, consulte about_Group_Policy_Settings.

O PowerShell 7 inclui modelos de Política de Grupo e um script de instalação no $PSHOME.

As ferramentas de Diretiva de Grupo usam arquivos de modelo administrativo (.admx, .adml) para preencher as configurações de diretiva na interface do usuário. Isso permite que os administradores gerenciem configurações de diretiva baseadas no Registro. O script InstallPSCorePolicyDefinitions.ps1 instala os Modelos Administrativos do PowerShell na máquina local.

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    Directory: C:\Program Files\PowerShell\7

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/27/2020 12:38 AM          15861 InstallPSCorePolicyDefinitions.ps1
-a---           2/27/2020 12:28 AM           9675 PowerShellCoreExecutionPolicy.adml
-a---           2/27/2020 12:28 AM           6201 PowerShellCoreExecutionPolicy.admx

Logs de eventos separados

Windows PowerShell e PowerShell 7 registam eventos em logs de eventos separados. Use o comando a seguir para obter uma lista dos logs do PowerShell.

Get-WinEvent -ListLog *PowerShell*

Para obter mais informações, consulte about_Logging_Windows.

Experiência de edição aprimorada com o Visual Studio Code

Visual Studio Code (VSCode) com o PowerShell Extension é o ambiente de script com suporte para o PowerShell 7. O ISE (Ambiente de Script Integrado) do Windows PowerShell oferece suporte apenas ao Windows PowerShell.

A extensão atualizada do PowerShell inclui:

  • Novo modo de compatibilidade ISE
  • PSReadLine na consola integrada, incluindo realce de sintaxe, edição de várias linhas e pesquisa retroativa
  • Melhorias na estabilidade e no desempenho
  • Nova integração com CodeLens
  • Preenchimento automático de caminho melhorado

Para facilitar a transição para o Visual Studio Code, utilize a função 'Ativar Modo ISE' disponível na 'Paleta de Comandos'. Esta função transforma o VSCode num layout ao estilo ISE. O layout no estilo ISE oferece todos os novos recursos e capacidades do PowerShell em uma experiência de usuário familiar.

Para alternar para o novo layout ISE, pressione Ctrl+Shift+P para abrir a Paleta de Comandos, digite PowerShell e selecione PowerShell: Ativar Modo ISE.

Para definir o layout para a formatação original, abra a Paleta de Comandos, selecione PowerShell: Desativar o Modo ISE (restaurar para os padrões predefinidos).

Para obter detalhes sobre como personalizar o layout do VSCode para ISE, consulte Como replicar a experiência ISE no Visual Studio Code

Observação

Não há planos para atualizar o ISE com novos recursos. Nas versões mais recentes do Windows 10 ou Windows Server 2019 e superiores, o ISE agora é um recurso não instalável pelo usuário. Não há planos para remover permanentemente o ISE. A equipe do PowerShell e seus parceiros estão focados em melhorar a experiência de script na extensão do PowerShell para Visual Studio Code.

Próximos passos

Armado com o conhecimento para migrar efetivamente, instalar o PowerShell 7 agora!