Capítulo 1 – Introdução ao PowerShell

Com frequência, descubro que os apresentadores em conferências e reuniões de grupo de usuários já têm o PowerShell em execução quando iniciam apresentações no nível básico. Este livro começa respondendo às perguntas que ouvi nessas sessões de participantes que não usavam anteriormente o PowerShell.

Especificamente, este capítulo se concentra na localização e na inicialização do PowerShell e na solução de alguns dos pontos problemáticos iniciais que os novos usuários enfrentam com o PowerShell. Lembre-se de acompanhar os exemplos mostrados neste capítulo no computador do ambiente de laboratório do Windows 10.

O que é necessário para começar a usar o PowerShell?

Todas as versões modernas de sistemas operacionais Windows são fornecidas com o PowerShell instalado. Se você estiver executando uma versão mais antiga que a 5.1, instale a última versão.

Em que local posso encontrar o PowerShell?

A maneira mais fácil de encontrar o PowerShell no Windows 10 é digitar PowerShell na barra de pesquisa, conforme mostrado na Figura 1-1.

Figura 1-1 – Pesquisar o PowerShell no menu Iniciar

Observe que quatro atalhos diferentes para o PowerShell são mostrados na Figura 1-1. O computador usado para fins de demonstração neste livro executa a versão de 64 bits do Windows 10 e, portanto, há uma versão de 64 bits do console do PowerShell e do ISE (Ambiente de Script Integrado) do PowerShell e uma versão de 32 bits de cada um, conforme indicado pelo sufixo (x86) nos atalhos. Se você estiver executando uma versão de 32 bits do Windows 10, terá apenas dois atalhos. Esses itens não têm o sufixo (x86), mas são versões de 32 bits. Se você tem um sistema operacional de 64 bits, minha recomendação é executar a versão de 64 bits do PowerShell, a menos que você tenha um motivo específico para executar a versão de 32 bits.

Para obter informações sobre como iniciar o PowerShell em outras versões do Windows, confira Como iniciar o Windows PowerShell.

Como fazer para iniciar o PowerShell?

Nos ambientes corporativos de produção aos quais dou suporte, uso três contas de usuário diferentes do Active Directory. Espelhei essas contas no ambiente de laboratório usado neste livro. Faço logon no computador Windows 10 como um usuário de domínio que não seja um administrador local ou de domínio.

Iniciei o console do PowerShell clicando no atalho "Windows PowerShell", conforme mostrado na Figura 1-1.

Figure 1-4 – Barra de título da janela do PowerShell

Observe que a barra de título do console do PowerShell indica "Windows PowerShell", conforme mostrado na Figura 1-4. Alguns comandos são executados corretamente, mas o PowerShell não pode participar 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. A seguinte mensagem de erro é gerada:

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

A solução para esse problema é executar o PowerShell como um usuário de domínio que seja um administrador local. É assim que a minha segunda conta de usuário de domínio está configurada. Usando o princípio de privilégio mínimo, essa conta NÃO deve ser um administrador de domínio ou ter privilégios elevados no domínio.

Feche o PowerShell. Reinicie o console do PowerShell, mas, desta vez, clique com o botão direito do mouse no atalho do Windows PowerShell e selecione Executar como administrador, conforme mostrado na Figura 1-5.

Figure 1-5 – Menu de contexto – Executar como administrador

Se você estiver conectado ao Windows como um usuário normal, precisará fornecer suas credenciais. Vou inserir as credenciais da minha conta de usuário que é um usuário de domínio e um administrador local, conforme mostrado na Figura 1-6.

Figura 1-6

Depois que o PowerShell for reiniciado como administrador, a barra de título deverá dizer "Administrador: Windows PowerShell", conforme mostrado na Figura 1-7.

Figura 1-7

Agora que o PowerShell está sendo executado com privilégios elevados como um administrador local, o UAC não será mais um problema quando um comando for executado no computador local que normalmente exigirá uma solicitação de elevação. Lembre-se de que qualquer comando executado nessa instância com privilégios elevados do console do PowerShell também é executado com privilégios elevados.

Para simplificar a localização do PowerShell e iniciá-lo como administrador, recomendo fixá-lo na barra de tarefas e defini-lo para ser iniciado automaticamente como administrador toda vez que for executado.

Pesquise o PowerShell novamente, mas, desta vez, clique com o botão direito do mouse nele e selecione "Fixar na barra de tarefas", conforme mostrado na Figura 1-8.

Figura 1-8

Clique com o botão direito do mouse no atalho do PowerShell que agora está fixado à barra de tarefas e selecione Propriedades, conforme mostrado na Figura 1-9.

Figure 1-9 – Controle de conta de usuário – Inserir credenciais

Clique em "Avançado", como indicado no nº 1 na Figura 1-10, marque a caixa de seleção "Executar como administrador", como indicado no nº 2 na Figura 1-10 e clique em OK duas vezes para aceitar as alterações e sair das duas caixas de diálogo.

Figure 1-10 – Barra de título mostrando

Você nunca precisará se preocupar em localizar o PowerShell ou se ele está sendo executado como administrador novamente.

A execução do PowerShell com privilégios elevados como administrador para evitar problemas com o UAC afeta apenas os comandos executados no computador local. Ele não tem nenhum efeito sobre os comandos direcionados para computadores remotos.

Qual versão do PowerShell estou executando?

Há várias variáveis automáticas no PowerShell que armazenam informações de estado. Uma dessas variáveis é $PSVersionTable, que contém uma tabela de hash que pode ser usada para exibir as informações relevantes da versão do PowerShell:

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

As versões mais recentes do Windows PowerShell são distribuídas como parte do WMF (Windows Management Framework). Uma versão específica do .NET Framework é necessária, dependendo da versão do WMF. Para fazer a atualização para o Windows PowerShell 5.1, confira Como atualizar o Windows PowerShell existente.

Política de execução

Ao contrário da crença popular, a política de execução no PowerShell não é um limite de segurança. Ela foi projetada para impedir que um usuário execute um script sem perceber. Um usuário determinado pode facilmente ignorar a política de execução no PowerShell. A Tabela 1-2 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
Server 2019 Remota assinada
Server 2016 Remota assinada
Windows 10 Restritos

Seja qual for a configuração de política de execução, qualquer comando do PowerShell pode ser executado de maneira interativa. A política de execução afeta somente os comandos em execução em um script. O cmdlet Get-ExecutionPolicy é usado para determinar qual é a configuração de política de execução atual, e o cmdlet Set-ExecutionPolicy é usado para alterar a política de execução. Minha recomendação é usar a política RemoteSigned, que exige que os scripts baixados sejam assinados por um editor confiável para serem executados.

Verifique a política de execução atual:

Get-ExecutionPolicy
Restricted

Os scripts do PowerShell não poderão ser executados quando a política de execução estiver definida como Restrita. Essa é a configuração padrão em todos os sistemas operacionais do cliente Windows. Para demonstrar o problema, salve o código a seguir como um arquivo .ps1 chamado Stop-TimeService.ps1.

Dica

Um script do PowerShell é um arquivo de texto sem formatação com uma .ps1 extensão que contém os comandos que você deseja executar. 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.

Get-Service -Name W32Time | Stop-Service -PassThru

Esse comando é executado de maneira interativa sem erros, desde que o PowerShell seja executado com privilégios elevados como administrador. Mas assim que ele é salvo como um arquivo de script e você tenta executar o script, ele gera um erro:

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

Observe que o erro mostrado no conjunto de resultados anterior informa exatamente qual é o problema (a execução de scripts está desabilitada nesse sistema). Quando você executa um comando no PowerShell que gera uma mensagem de erro, leia a mensagem de erro em vez de apenas executar novamente o comando e esperar que ele seja executado com êxito.

Altere a política de execução do PowerShell para remota assinada.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
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 http://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

Lembre-se de ler o aviso que é exibido ao alterar a política de execução. Também recomendo dar uma olhada no tópico da Ajuda about_Execution_Policies para verificar se você entendeu as implicações de segurança da alteração da política de execução.

Agora que a política de execução foi definida como RemoteSigned, o script Stop-TimeService.ps1 é executado sem erros.

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

Não se esqueça de iniciar o serviço de Tempo do Windows antes de continuar, caso contrário, você poderá ter problemas imprevistos.

Start-Service -Name w32time

Resumo

Neste capítulo, você aprendeu a localizar e iniciar o PowerShell e a criar um atalho que inicia o PowerShell como administrador. Você também aprendeu mais sobre a política de execução padrão e como alterá-la.

Revisão

  1. Como determinar qual versão do PowerShell um computador está executando?
  2. Por que é importante iniciar o PowerShell com privilégios elevados como administrador?
  3. Como determinar a política de execução atual do PowerShell?
  4. O que a política de execução padrão do PowerShell nos computadores cliente Windows impede que ocorra?
  5. Como alterar a política de execução do PowerShell?

Para aqueles que desejam saber mais sobre os tópicos abordados neste capítulo, recomendo a leitura dos tópicos da Ajuda do PowerShell a seguir.

No próximo capítulo, você aprenderá mais sobre a detectabilidade de comandos no PowerShell. Uma das coisas que será abordada é como atualizar o PowerShell para que esses tópicos da Ajuda possam ser exibidos diretamente no PowerShell, em vez de precisar exibi-los na Internet.