Compartilhar via


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 neste capítulo no computador do seu ambiente de laboratório.

O que é o PowerShell?

O Windows PowerShell é um ambiente de script e shell de linha de comando fácil de usar para automatizar tarefas administrativas de sistemas baseados no Windows. O Windows PowerShell é 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, conforme mostrado na Figura 1-1. Observe que há quatro atalhos diferentes para o Windows PowerShell.

Figura 1-1 – Pesquise o PowerShell.

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

  • Windows PowerShell
  • Windows PowerShell ISE
  • 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.

Observação

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 ISE do Windows PowerShell.

Você só tem dois atalhos se estiver executando 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.

Eu 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 do 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 em que você cria scripts do PowerShell. Você não precisa instalá-los em todos os computadores em que executa o PowerShell.

Como iniciar o PowerShell

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

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

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

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

Observação

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, interromper 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 privilégio mínimo, 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, conforme mostrado na 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, conforme mostrado na Figura 1-4.

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

Observe que a barra de título das janelas de console com privilégios elevados diz Administrador: Windows PowerShell, conforme mostrado na Figura 1-5.

Figura 1-5 – Barra de título da janela do PowerShell com privilégios elevados.

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 for absolutamente necessário.

Quando você direciona 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. Fixe o atalho do PowerShell ou do Terminal do Windows na barra de tarefas. Procure o PowerShell novamente, exceto que 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ê iniciasse o PowerShell. No entanto, devido a possíveis preocupações de segurança, não o recomendo mais. Todos os aplicativos que você inicia de uma instância elevada do PowerShell também ignoram o UAC e são executados com elevação. Por exemplo, se você iniciar um navegador da Web de uma instância elevada do PowerShell, qualquer site que você visitar contendo código mal-intencionado também será executado com privilégios elevados.

Quando você 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, conforme mostrado na 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 vem pré-instalado nas versões atualmente com suporte do Windows.

O PowerShell versão 7 não é um substituto para 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.

Dica

Não há mais suporte para o PowerShell versão 6, anteriormente conhecido como PowerShell Core.

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 diretivas 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 do Windows Política de execução padrão
Windows Server 2022 Remota assinada
Windows Server 2019 Remota assinada
Windows Server 2016 Remota assinada
Windows 11 Restritos
Windows 10 Restritos

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 somente os comandos em execução em um script. Use o Get-ExecutionPolicy cmdlet para determinar a configuração da política de execução atual.

Verifique a configuração da política de execução em 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 política de execução padrão de Restricted. Você não pode 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.

Dica

Um script do PowerShell é um arquivo de texto não criptografado 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 comando a seguir interativamente, ele é concluído sem erros.

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

Ao executar um comando no PowerShell que gera um erro, leia a mensagem de erro antes de repetir 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 do computador local. A menos que você esteja assinando seus scripts, recomendo usar a política de RemoteSigned 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 configuração da diretiva 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 do 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 da 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 a determinar a versão do PowerShell e a finalidade das políticas de execução.

Revisão

  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óximas etapas

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