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.
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.
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.
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.
Observe que a barra de título das janelas elevadas do console diz Administrador: Windows PowerShell, como mostra a Figura 1-5.
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.
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.
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
- Como determinar qual versão do PowerShell um computador está executando?
- Quando você deve iniciar o PowerShell elevado como administrador?
- Qual é a política de execução padrão em computadores cliente Windows e o que ela impede que você faça?
- Como você determina a configuração atual da política de execução do PowerShell?
- 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.