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:
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
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ê 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
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!