Compartilhar via


Migrando do Windows PowerShell 5.1 para o PowerShell 7

Projetado para ambientes de nuvem, locais e híbridos, o PowerShell 7 é 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 de linguagem, como operadores ternários e ForEach-Object -Parallel
  • Desempenho aprimorado
  • Comunicação remota baseada em SSH
  • Interoperabilidade entre plataformas
  • Suporte para contêineres do 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.

Há suporte para o PowerShell 7 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 do Linux. Para obter uma lista de sistemas operacionais com suporte e informações sobre o ciclo de vida de suporte, consulte o PowerShell Support Lifecycle.

Instalando o PowerShell 7

Para flexibilidade e para dar 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

Nota

O pacote MSI pode ser implantado e atualizado com produtos de gerenciamento, como do Microsoft Configuration Manager. Baixe os pacotes na 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 sua migração para o PowerShell 7 seja simples.

  • Caminho de instalação e nome do executável separados
  • PSModulePath separado
  • Perfis separados para cada versão
  • Compatibilidade aprimorada do módulo
  • Novos pontos de extremidade de comunicação remota
  • Suporte à política de grupo
  • Logs de eventos separados

Diferenças nas versões do .NET

O PowerShell 7.4 é criado no .NET 8.0. O Windows PowerShell 5.1 é criado 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 mais informações, veja Diferenças entre Windows PowerShell 5.1 e PowerShell 7.x.

Caminho de instalação e nome do executável separados

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 será substituído.

No Windows PowerShell, o executável do PowerShell é nomeado 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 ambiente $Env:PSModulePath. Ao importar um módulo por nome, o PowerShell verifica o local especificado por $Env:PSModulePath. Isso permite que o PowerShell 7 carregue os módulos Core e Desktop.

Escopo de instalação 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 usuário
Escopo dos AllUsers
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Instalado pelo usuário
Escopo CurrentUser
$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 o carregamento automático de módulos.

Nota

Caminhos adicionais poderão 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.

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

Os nomes de arquivo 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

Confira mais informações em 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 Active Directory. Continuamos trabalhando com outras equipes para adicionar suporte nativo do PowerShell 7 para mais módulos, incluindo Microsoft Graph, Office 365 e outros. Para obter a lista atual de módulos com suporte, consulte a compatibilidade de módulos do PowerShell 7 em .

Nota

No Windows, também adicionamos a opção UseWindowsPowerShell 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.

Comunicação remota do WS-Management

O Windows PowerShell 5.1 e abaixo usam o protocolo WS-Management (WSMAN) para negociação de conexão e transporte de dados. O WinRM (Gerenciamento Remoto do Windows) usa o protocolo WSMAN. Se o WinRM estiver habilitado, o PowerShell 7 usará o ponto de extremidade existente do Windows PowerShell 5.1 chamado Microsoft.PowerShell para conexões de comunicação remota. Para atualizar o PowerShell 7 de modo que inclua seu próprio ponto de extremidade, execute o cmdlet Enable-PSRemoting. Confira mais informações sobre como se conectar a pontos de extremidade específicos em Comunicação remota do WS-Management 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.

Confira mais informações sobre a comunicação remota em Sobre comunicação remota

Comunicação remota baseada em SSH

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

Nota

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

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 o nome de usuário com UserName. Ao executar os cmdlets interativamente, você recebe uma solicitação de senha.

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

Como alternativa, ao usar o parâmetro HostName, forneça as informações de nome de usuário seguidas pelo sinal (@), 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 o Gerenciamento de Chaves do OpenSSH.

Política de Grupo compatível

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 empresarial. Essas configurações incluem:

  • Configuração da sessão do console: define um ponto de extremidade de configuração no qual o PowerShell é executado.
  • Ativar Registro em Log do Módulo: define a propriedade LogPipelineExecutionDetails dos módulos.
  • Ativar o log de blocos de script do PowerShell: habilita o log detalhado de todos os scripts do PowerShell.
  • Ativar a Execução de Script: define a política de execução do PowerShell.
  • Ative a Transcrição do PowerShell: habilita a captura de entrada e saída de comandos do PowerShell em transcrições baseadas em texto.
  • Defina o caminho de origem padrão para a Atualização-Ajuda: define a origem da Ajuda Atualizável para um diretório, não para a Internet.

Confira mais informações em 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 Política de Grupo usam arquivos de modelo administrativo (.admx, .adml) para preencher as configurações de política na interface do usuário. Isso permite que os administradores gerenciem as configurações de política baseadas em registro. O script InstallPSCorePolicyDefinitions.ps1 instala modelos administrativos do PowerShell no computador 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 registram eventos em logs de eventos separados. Use o comando a seguir para obter uma lista dos logs do PowerShell.

Get-WinEvent -ListLog *PowerShell*

Confira mais informações em about_Logging_Windows.

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

O VSCode (Visual Studio Code) com a Extensão do PowerShell é o ambiente de script compatível com o PowerShell 7. O ISE (Ambiente de Script Integrado) do Windows PowerShell dá suporte apenas ao Windows PowerShell.

A extensão atualizada do PowerShell inclui:

  • Novo modo de compatibilidade do ISE
  • PSReadLine no Console Integrado, incluindo realce de sintaxe, edição de várias linhas e pesquisa de retorno
  • Melhorias de estabilidade e desempenho
  • Nova integração do CodeLens
  • Preenchimento automático de caminho aprimorado

Para facilitar a transição para o Visual Studio Code, use a função Habilitar modo ISE disponível na paleta de comandos . Esta função muda o VSCode para um layout semelhante ao ISE. O layout no estilo ISE oferece todos os novos recursos e funcionalidades do PowerShell em uma experiência de usuário familiar.

Para alternar para o novo layout do ISE, pressione Ctrl+Shift+P para abrir a paleta de comandos , digite PowerShell e selecione PowerShell: Habilitar o modo ISE.

Para definir o layout para o original, abra a Paleta de Comandos, selecione PowerShell: Desabilitar o Modo ISE (restaurar padrões) .

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

Nota

Não há planos para atualizar o ISE com novos recursos. Nas versões mais recentes do Windows 10 ou Windows Server 2019 e superior, o ISE agora é um recurso desinstalá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óximas etapas

Munido do conhecimento para migrar com eficiência, instale o PowerShell 7 agora!