Capítulo 1 - Introdução ao PowerShell

Este capítulo se concentra em localizar e iniciar o PowerShell e resolver os pontos problemáticos iniciais que os novos usuários experimentam com o PowerShell. Acompanhe e percorra os exemplos deste capítulo no computador do seu ambiente de laboratório.

What is PowerShell? (O que é o PowerShell?)

O Windows PowerShell é um shell de linha de comando e ambiente de script fácil de usar para automatizar tarefas administrativas de sistemas baseados no Windows. O Windows PowerShell está pré-instalado em todas as versões modernas do sistema operacional Windows.

Onde encontrar o PowerShell

A maneira mais fácil de encontrar o PowerShell no Windows 11 é digitar PowerShell na barra de pesquisa, como mostra a Figura 1-1. Observe que há quatro atalhos diferentes para o Windows PowerShell.

Figura 1-1 - Procurar PowerShell.

Atalhos do Windows PowerShell em uma versão de 64 bits do Windows:

  • Windows PowerShell
  • ISE do Windows PowerShell
  • Windows PowerShell (x86)
  • ISE do Windows PowerShell (x86)

Em uma versão de 64 bits do Windows, você tem uma versão de 64 bits do console do Windows PowerShell e do ISE (Ambiente de Script Integrado) do Windows PowerShell e uma versão de 32 bits de cada um, conforme indicado pelo sufixo (x86) nos atalhos.

Nota

O Windows 11 é fornecido apenas como um sistema operacional de 64 bits. Não existe uma versão de 32 bits do Windows 11. No entanto, o Windows 11 inclui versões de 32 bits do Windows PowerShell e do Windows PowerShell ISE.

Só tem dois atalhos se estiver a executar uma versão mais antiga de 32 bits do Windows. Esses atalhos não têm o sufixo (x86), mas são versões de 32 bits.

Recomendo usar a versão de 64 bits do Windows PowerShell se você estiver executando um sistema operacional de 64 bits, a menos que tenha um motivo específico para usar a versão de 32 bits.

Dependendo da versão do Windows 11 que você está executando, o Windows PowerShell pode ser aberto no Terminal do Windows.

A Microsoft não atualiza mais o ISE do PowerShell. O ISE só funciona com o Windows PowerShell 5.1. O Visual Studio Code (VS Code) com a extensão PowerShell funciona com ambas as versões do PowerShell. O VS Code e a extensão do PowerShell não são fornecidos no Windows. Instale o VS Code e a extensão no computador onde você cria scripts do PowerShell. Não é necessário instalá-los em todos os computadores onde você executa o PowerShell.

Como iniciar o PowerShell

Uso três contas de usuário diferentes do Ative Directory nos ambientes de produção aos quais dou suporte. Eu espelhei esses relatos no ambiente de laboratório usado neste livro. Começo sessão no meu computador Windows 11 como utilizador de domínio sem direitos de administrador local ou de domínio.

Inicie o console do PowerShell clicando no atalho do Windows PowerShell , como mostra a Figura 1-1. Observe que a barra de título do console diz Windows PowerShell, como mostra a Figura 1-2.

Figura 1-2 - Barra de título da janela do PowerShell.

Alguns comandos são executados corretamente quando você executa o PowerShell como um usuário comum. No entanto, o PowerShell não participa do Controle de Acesso de Usuário (UAC). Isso significa que ele não pode solicitar elevação para tarefas que exigem a aprovação de um administrador.

Nota

O UAC é um recurso de segurança do Windows que ajuda a impedir que códigos mal-intencionados sejam executados com privilégios elevados.

Quando conectado como um usuário comum, o PowerShell retorna um erro quando você executa um comando que requer elevação. Por exemplo, parar um serviço do Windows:

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

A solução é executar o PowerShell elevado como um usuário que é um administrador local. Foi assim que configurei minha segunda conta de usuário de domínio. Seguindo o princípio do menor privilégio, essa conta não deve ser um administrador de domínio ou ter privilégios elevados no domínio.

Para iniciar o PowerShell com direitos elevados, clique com o botão direito do mouse no atalho do Windows PowerShell e selecione Executar como administrador, como mostra a Figura 1-3.

Figura 1-3 - Menu de contexto - Executar como administrador.

O Windows solicita credenciais porque você fez login no Windows como um usuário comum. Insira as credenciais do usuário do domínio que é um administrador local, como mostra a Figura 1-4.

Figura 1-4 - Controle de conta de usuário - Insira as credenciais.

Observe que a barra de título das janelas elevadas do console diz Administrador: Windows PowerShell, como mostra a Figura 1-5.

Figura 1-5 - Barra de título da janela elevada do PowerShell.

Agora que você está executando o PowerShell elevado como administrador, o UAC não é mais um problema quando você executa um comando que requer elevação.

Importante

Você só deve executar o PowerShell elevado como administrador quando absolutamente necessário.

Quando você segmenta computadores remotos, não há necessidade de executar o PowerShell elevado. A execução do PowerShell elevado afeta apenas os comandos executados no computador local.

Você pode simplificar a localização e a inicialização do PowerShell. Afixe o atalho do PowerShell ou do Terminal do Windows na barra de tarefas. Procure o PowerShell novamente, exceto desta vez, clique com o botão direito do mouse nele e selecione Fixar na barra de tarefas, conforme mostrado na Figura 1-6.

Figura 1-6 - Menu de contexto - Fixar na barra de tarefas.

Importante

A versão original deste livro, publicada em 2017, recomendava fixar um atalho na barra de tarefas para iniciar uma instância elevada automaticamente sempre que você iniciar o PowerShell. No entanto, devido a potenciais preocupações de segurança, já não o recomendo. Todos os aplicativos iniciados a partir de uma instância elevada do PowerShell também ignoram o UAC e executam elevados. Por exemplo, se você iniciar um navegador da Web a partir de uma instância elevada do PowerShell, qualquer site visitado contendo código mal-intencionado também será executado elevado.

Quando precisar executar o PowerShell com permissões elevadas, clique com o botão direito do mouse no atalho do PowerShell fixado na barra de tarefas enquanto pressiona Shift. Selecione Executar como administrador, como mostra a Figura 1-7.

Figura 1-7 - Menu de contexto - Executar como administrador.

Determinar sua versão do PowerShell

Há variáveis automáticas no PowerShell que armazenam informações de estado. Uma dessas variáveis é $PSVersionTable, que contém informações de versão sobre sua sessão do PowerShell.

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Se você estiver executando uma versão do Windows PowerShell anterior à 5.1, deverá atualizar sua versão do Windows. O Windows PowerShell 5.1 está pré-instalado nas versões atualmente suportadas do Windows.

O PowerShell versão 7 não substitui o Windows PowerShell 5.1; ele é instalado lado a lado com o Windows PowerShell. O Windows PowerShell versão 5.1 e o PowerShell versão 7 são dois produtos diferentes. Para obter mais informações sobre as diferenças entre o Windows PowerShell versão 5.1 e o PowerShell versão 7, consulte Migrando do Windows PowerShell 5.1 para o PowerShell 7.

Gorjeta

A versão 6 do PowerShell, anteriormente conhecida como PowerShell Core, não é mais suportada.

Política de execução

A política de execução do PowerShell controla as condições sob as quais você pode executar scripts do PowerShell. A política de execução no PowerShell é um recurso de segurança projetado para ajudar a impedir a execução não intencional de scripts mal-intencionados. No entanto, não é um limite de segurança porque não pode impedir que determinados usuários executem scripts deliberadamente. Um determinado usuário pode ignorar a política de execução no PowerShell.

Você pode definir uma política de execução para o computador local, o usuário atual ou uma sessão do PowerShell. Você também pode definir políticas de execução para usuários e computadores com a Diretiva de Grupo.

A tabela a seguir mostra a política de execução padrão para os sistemas operacionais Windows atuais.

Versão do sistema operacional Windows Política de execução padrão
Windows Server 2022 Assinado remotamente
Windows Server 2019 Assinado remotamente
Windows Server 2016 Assinado remotamente
Windows 11 Restrito
Windows 10 Restrito

Independentemente da configuração da política de execução, você pode executar qualquer comando do PowerShell interativamente. A política de execução afeta apenas os comandos executados em um script. Use o Get-ExecutionPolicy cmdlet para determinar a configuração de política de execução atual.

Verifique a definição da política de execução no seu computador.

Get-ExecutionPolicy
Restricted

Liste as configurações de política de execução para todos os escopos.

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Todos os sistemas operacionais cliente Windows têm a configuração de diretiva de execução padrão de Restricted. Não é possível executar scripts do PowerShell usando a configuração de política de Restricted execução. Para testar a política de execução, salve o código a seguir como um .ps1 arquivo chamado Get-TimeService.ps1.

Gorjeta

Um script do PowerShell é um arquivo de texto sem formatação que contém os comandos que você deseja executar. Os arquivos de script do PowerShell usam a extensão de .ps1 arquivo. Para criar um script do PowerShell, use um editor de código como o Visual Studio Code (VS Code) ou qualquer editor de texto, como o Bloco de Notas.

Quando você executa o seguinte comando interativamente, ele é concluído sem erro.

Get-Service -Name W32Time

No entanto, o PowerShell retorna um erro quando você executa o mesmo comando de um script.

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Quando você executa um comando no PowerShell que gera um erro, leia a mensagem de erro antes de tentar novamente o comando. Observe que a mensagem de erro informa por que o comando falhou:

... A execução de scripts está desativada neste sistema.

Para habilitar a execução de scripts, altere a política de execução com o Set-ExecutionPolicy cmdlet. LocalMachine é o escopo padrão quando você não especifica o parâmetro Scope . Você deve executar o PowerShell elevado como administrador para alterar a política de execução para a máquina local. A menos que você esteja assinando seus scripts, recomendo usar a RemoteSigned política de execução. RemoteSigned Impede que você execute scripts baixados que não são assinados por um editor confiável.

Antes de alterar a política de execução, leia o artigo de ajuda do about_Execution_Policies para entender as implicações de segurança.

Altere a definição da política de execução no computador para RemoteSigned.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Se você tiver alterado com êxito a política de execução, o PowerShell exibirá o seguinte aviso:

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y

Se você não estiver executando o PowerShell elevado como administrador, o PowerShell retornará a seguinte mensagem de erro:

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

Também é possível alterar a política de execução para o usuário atual sem exigir que você execute o PowerShell elevado como administrador. Esta etapa será desnecessária se você definir com êxito a política de execução para a máquina local como RemoteSigned.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Com a política de execução definida como RemoteSigned, o Get-TimeService.ps1 script é executado com êxito.

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

Resumo

Neste capítulo, você aprendeu onde encontrar e como iniciar o PowerShell. Você também aprendeu como determinar a versão do PowerShell e a finalidade das políticas de execução.

Rever

  1. Como determinar qual versão do PowerShell um computador está executando?
  2. Quando você deve iniciar o PowerShell elevado como administrador?
  3. Qual é a política de execução padrão em computadores cliente Windows e o que ela impede que você faça?
  4. Como você determina a configuração atual da política de execução do PowerShell?
  5. Como alterar a política de execução do PowerShell?

Referências

Para saber mais sobre os conceitos abordados neste capítulo, leia os seguintes artigos de ajuda do PowerShell.

Próximos passos

No próximo capítulo, você aprenderá sobre a capacidade de descoberta de comandos no PowerShell. Você também aprenderá como baixar os arquivos de ajuda do PowerShell para poder exibir a ajuda em sua sessão do PowerShell.