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
- Comunicação remota 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 Ciclo de Vida de Suporte do PowerShell.
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
Nota
O pacote MSI pode ser implantado e atualizado com produtos de gerenciamento, como o Microsoft Configuration Manager. Baixe os pacotes da página de versão 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
do . 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.
- Caminho de instalação separado e 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.2 é baseado no .NET 6.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.
Caminho de instalação separado 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.
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 utilizador Âmbito de aplicação de todos os utilizadores |
$env:ProgramFiles\WindowsPowerShell\Modules |
$env:ProgramFiles\PowerShell\Modules |
Instalado pelo utilizador 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 carregamento automático de módulos.
Nota
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.
- No 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 Compatibilidade de módulos do PowerShell 7.
Nota
No Windows, também adicionamos uma opção UseWindowsPowerShell para Import-Module
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 de 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 WS-Management
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 nomeado Microsoft.PowerShell
para conexões remotas. Para atualizar o PowerShell 7 para incluir seu próprio ponto de extremidade, execute o Enable-PSRemoting
cmdlet. Para obter informações sobre como se conectar a pontos de extremidade específicos, consulte WS-Management Remoting in 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 no PowerShell 6.x para oferecer suporte a outros sistemas operacionais que não podem usar componentes nativos do Windows, como o WinRM. A comunicação remota SSH cria um processo de host 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.
Nota
A Galeria do PowerShell (PSGallery) contém um módulo e cmdlet que configura automaticamente a comunicação remota baseada em SSH. Instale o Microsoft.PowerShell.RemotingTools
módulo do PSGallery e execute o Enable-SSH
cmdlet.
Os New-PSSession
cmdlets , Enter-PSSession
e têm Invoke-Command
novos conjuntos de parâmetros para oferecer 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, 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 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. Estas definições incluem:
- Configuração da sessão de console: define um ponto de extremidade de configuração no qual o PowerShell é executado.
- Ativar Registro em Log de Módulos: define a propriedade LogPipelineExecutionDetails dos módulos.
- Ativar o Log de Blocos de Scripts do PowerShell: habilita o registro 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 Update-Help: define a fonte da Ajuda atualizável como um diretório, não para a Internet.
Para obter mais informações, veja 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 diretiva na interface do usuário. Isso permite que os administradores gerenciem configurações de diretiva baseadas no Registro. O InstallPSCorePolicyDefinitions.ps1
script 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
O Windows PowerShell e o PowerShell 7 registram eventos para separar logs de eventos. 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
O Visual Studio Code (VSCode) com a Extensão PowerShell é 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 de estabilidade e desempenho
- Nova integração com CodeLens
- Preenchimento automático de caminho melhorado
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 alterna o VSCode em um layout de 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 o layout original, abra a Paleta de Comandos, selecione PowerShell: Desabilitar Modo ISE (restaurar para 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 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.
Passos Seguintes
Armado com o conhecimento para migrar efetivamente, instale o PowerShell 7 agora!