Migrando do Windows PowerShell 5.1 para o PowerShell 7
Projetado para ambientes locais, híbridos e de nuvem, o PowerShell 7 é fornecido com aprimoramentos e novos recursos.
- É instalado e executado lado a lado com o Windows PowerShell
- Melhorias na compatibilidade com os 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 os contêineres do Docker
O PowerShell 7 funciona em conjunto com o Windows PowerShell, permitindo testar e comparar facilmente as edições antes da implantação. A migração é simples, rápida e segura.
O PowerShell 7 é compatível com os 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 dos sistemas operacionais compatíveis e informações do ciclo de vida de suporte, confira o Ciclo de vida de suporte do PowerShell.
Instalar o PowerShell 7
Para obter flexibilidade e dar suporte às necessidades de TI, aos engenheiros de DevOps e aos desenvolvedores, há várias opções disponíveis para instalação do 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 o Microsoft Configuration Manager. Baixe os pacotes da página de versões 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 testes, antes de se comprometer com uma instalação completa.
Você também pode instalar o PowerShell 7 por meio da Microsoft Store ou winget
. Para obter mais informações sobre esses dois métodos, confira as instruções detalhadas em Instalando o PowerShell no Windows.
Usar o PowerShell 7 em conjunto 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 a 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 de módulo aprimorada
- 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.2 foi desenvolvido com base no .NET 6.0. O Windows PowerShell 5.1 é criado na plataforma .NET Framework v4.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, confira Diferenças entre o Windows PowerShell 5.1 e o 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 em conjunto 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 caminho, permitindo que você execute o Windows PowerShell 5.1 e o PowerShell 7. Se você fizer a migração do PowerShell Core 6.x para o PowerShell 7, o PowerShell 6 será removido e o PATH substituído.
No Windows PowerShell, o executável do PowerShell é denominado powershell.exe
. Na versão 6 e posteriores, o executável é denominado pwsh.exe
. O novo nome torna facilita o suporte à execução lado a lado das duas versões.
PSModulePath separado
Por padrão, o Windows PowerShell e o PowerShell 7 armazenam seus 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 no $Env:PSModulePath
. Assim, o PowerShell 7 pode carregar 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 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 do PowerShell 7 para fornecer o carregamento automático de módulos.
Observação
Poderá haver caminhos adicionais se você tiver alterado a variável de ambiente PSModulePath ou instalado módulos ou aplicativos personalizados.
Para saber mais, confira about_PSModulePath.
Para obter mais informações sobre módulos, confira about_Modules.
Perfis separados
Um perfil do PowerShell é um script 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 cada sessão 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 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
Confira mais informações em about_Profiles.
Compatibilidade do PowerShell 7 com os módulos do Windows PowerShell 5.1
A maioria dos módulos que você usa no Windows PowerShell 5.1 já funciona com o PowerShell 7, incluindo o Azure PowerShell e o Active Directory. Continuamos a trabalhar com outras equipes para adicionar suporte nativo do PowerShell 7 em mais módulos, incluindo o Microsoft Graph, Office 365 e outros. Confira a lista atual de módulos compatíveis em Compatibilidade de módulos do PowerShell 7.
Observação
No Windows, também adicionamos uma opção UseWindowsPowerShell a Import-Module
a fim de facilitar a transição para o PowerShell 7 de quem usa módulos incompatíveis. Para obter mais informações sobre essa funcionalidade, confira about_Windows_PowerShell_Compatibility.
Comunicação remota do PowerShell
A comunicação remota do PowerShell permite executar qualquer comando do PowerShell em um ou vários 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 as versões anteriores usam o protocolo WSMAN (WS-Management) 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 mas 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 o 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.
Observação
A PSGallery (Galeria do PowerShell) contém um módulo e um cmdlet que configura automaticamente a comunicação remota baseada em SSH. Instale o módulo Microsoft.PowerShell.RemotingTools
da PSGallery e execute o cmdlet Enable-SSH
.
Os cmdlets New-PSSession
, Enter-PSSession
e 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ê receberá 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 de arroba (@
) e pelo nome do computador.
Enter-PSSession -HostName <Username>@<Computer>
Você também pode configurar a autenticação de chave SSH usando um arquivo de chave privada com o parâmetro KeyFilePath. Confira mais informações em Gerenciamento de chaves OpenSSH.
Política de Grupo compatível
O PowerShell inclui configurações de Política de Grupo para ajudar você a definir valores consistentes de opções nos servidores de um ambiente empresarial. Essas configurações incluem:
- Configuração de sessão do console: define um ponto de extremidade de configuração em que o PowerShell é executado.
- Ativar Registro em Log do Módulo: define a propriedade LogPipelineExecutionDetails dos módulos.
- Ativar o Registro em Log de Blocos de Script do PowerShell: ativa o registro em log detalhado de todos os scripts do PowerShell.
- Ativar a Execução do Script: define a política de execução do PowerShell.
- Ativar a Transcrição do PowerShell: ativa a captura de entradas e saídas dos comandos do PowerShell como transcrições baseadas em texto.
- Definir o caminho de origem padrão para Update-Help: define a origem para a Ajuda Atualizável como um diretório, e não 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 em $PSHOME
.
As ferramentas de Política de Grupo usam arquivos de modelos administrativos (.admx
, .adml
) para preencher as configurações de políticas na interface do usuário. Assim, os administradores podem gerenciar as configurações de políticas com base no registro. O script InstallPSCorePolicyDefinitions.ps1
instala os 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
O Windows PowerShell e o PowerShell 7 registram eventos em logs de eventos separados. Use o comando a seguir para obter uma lista de logs do PowerShell.
Get-WinEvent -ListLog *PowerShell*
Confira mais informações em about_Logging_Windows.
Melhoria da experiência de edição no 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 somente 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 desempenho e estabilidade
- 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 o Modo ISE disponível na Paleta de Comandos. Essa função alterna o VSCode para um layout no estilo do ISE. O layout no estilo do ISE fornece todos os novos recursos e funcionalidades do PowerShell em uma experiência de usuário conhecida.
Para alternar para o novo layout do ISE, pressione Ctrl+Shift+P a fim de 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 o ISE, confira Como Replicar a Experiência do 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 do Windows Server 2019 e posteriores, 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 concentram-se em melhorar a experiência de script na extensão do PowerShell para o Visual Studio Code.
Próximas etapas
Munido do conhecimento para migrar efetivamente, instale o PowerShell 7 agora mesmo!