Partilhar via


Capítulo 1 - Introdução ao PowerShell

Costumo achar que os apresentadores em conferências e reuniões de grupos de usuários já têm o PowerShell em execução quando iniciam apresentações de nível básico. Este livro começa respondendo às perguntas que ouvi os participantes que não usaram o PowerShell anteriormente fazerem nessas sessões.

Especificamente, este capítulo se concentra em localizar e iniciar o PowerShell e resolver alguns dos pontos problemáticos iniciais que os novos usuários experimentam com o PowerShell. Certifique-se de acompanhar e percorrer os exemplos mostrados neste capítulo no seu computador com ambiente de laboratório do Windows 10.

O que eu preciso para começar a usar o PowerShell?

Todas as versões modernas dos sistemas operacionais Windows são fornecidas com o PowerShell instalado. Se estiver a executar uma versão anterior à 5.1, deve instalar a versão mais recente.

Onde posso encontrar o PowerShell?

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

Figura 1-1 - Pesquisa do 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 está executando a versão de 64 bits do Windows 10, portanto, há uma versão de 64 bits do console do PowerShell e do ISE (Integrated Scripting Environment) do PowerShell, e uma versão de 32 bits de cada um, conforme indicado pelo sufixo (x86) nos atalhos. Se acontecer de você estar executando uma versão de 32 bits do Windows 10, você só terá dois atalhos. Esses itens não têm o sufixo (x86), mas são versões de 32 bits. Se você tiver 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, consulte Iniciando o Windows PowerShell.

Como faço para iniciar o PowerShell?

Nos ambientes corporativos de produção aos quais dou suporte, uso três contas de usuário diferentes do Ative Directory. Eu espelhei essas contas no ambiente de laboratório usado neste livro. Inicio sessão no computador Windows 10 como um utilizador de domínio que não é um administrador local ou de domínio.

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

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

Observe que a barra de título do console do PowerShell diz "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 ele não pode solicitar 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 é um administrador local. É assim que minha segunda conta de usuário de domínio é configurada. Usando o princípio de menor privilégio, 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, exceto que, 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.

Figura 1-5 - Menu de contexto - Executar como administrador

Se tiver sessão iniciada no Windows como utilizador normal, ser-lhe-ão solicitadas credenciais. Vou inserir as credenciais da minha conta de usuário, que é um usuário de domínio e administrador local, como mostra a 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 elevado como um administrador local, o UAC não será mais um problema quando um comando for executado no computador local que normalmente exigiria um prompt para elevação. Lembre-se, no entanto, de que qualquer comando executado a partir dessa instância elevada do console do PowerShell também é executado elevado.

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

Procure o PowerShell novamente, exceto desta vez, clique com o botão direito do mouse nele e selecione "Fixar na barra de tarefas", como mostra a Figura 1-8.

Figura 1-8

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

Figura 1-9 - Controle de conta de usuário - insira credenciais

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

Figura 1-10 - Barra de título mostrando

Você nunca terá que se preocupar em encontrar o PowerShell ou se ele está ou não sendo executado como administrador novamente.

A execução do PowerShell elevado como administrador para evitar problemas com o UAC afeta apenas os comandos executados no computador local. Não tem efeito sobre os comandos que visam computadores remotos.

Que 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 hashtable que pode ser usada para exibir as informações de versão relevantes 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 Windows Management Framework (WMF). Uma versão específica do .NET Framework é necessária, dependendo da versão WMF. Para atualizar para o Windows PowerShell 5.1, consulte Atualizando 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. Ele foi projetado para impedir que um usuário execute um script sem saber. Um determinado usuário 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 Windows Política de execução padrão
Server 2019 Assinado remotamente
Server 2016 Assinado remotamente
Windows 10 Restrito

Independentemente da configuração da política de execução, qualquer comando do PowerShell pode ser executado interativamente. A política de execução afeta apenas os comandos executados em um script. O Get-ExecutionPolicy cmdlet é usado para determinar qual é a configuração de política de execução atual e o Set-ExecutionPolicy cmdlet é 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 podem ser executados quando a política de execução está definida como Restrita. Esta é a configuração padrão em todos os sistemas operacionais cliente Windows. Para demonstrar o problema, salve o código a seguir como um .ps1 arquivo chamado Stop-TimeService.ps1.

Gorjeta

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 interativamente sem erros, desde que o PowerShell seja executado elevado 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 anterior de resultados informa exatamente qual é o problema (a execução de scripts está desativada neste sistema). Quando você executa um comando no PowerShell que gera uma mensagem de erro, certifique-se de ler 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 assinatura remota.

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

Certifique-se de ler o aviso exibido ao alterar a política de execução. Também recomendo dar uma olhada no tópico de ajuda about_Execution_Policies para garantir que você entenda 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 Stop-TimeService.ps1 script é executado sem erros.

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

Certifique-se de iniciar o serviço de Tempo do Windows antes de continuar, caso contrário, você pode ter problemas imprevistos.

Start-Service -Name w32time

Resumo

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

Rever

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

Para aqueles que querem saber mais informações sobre os tópicos abordados neste capítulo, recomendo ler os seguintes tópicos de ajuda do PowerShell.

No próximo capítulo, você aprenderá sobre a capacidade de descoberta de comandos no PowerShell. Uma das coisas que serão abordadas é como atualizar o PowerShell para que esses tópicos de ajuda possam ser exibidos diretamente do PowerShell, em vez de ter que visualizá-los na Internet.