Como Executar um Script do PowerShell a Partir da Linha de Comando e Mais

Se você é novo na linguagem de script PowerShell e deseja aprender como executar um script do PowerShell, você veio ao post do blog certo. Este blog será um tutorial cobrindo maneiras comuns de executar scripts e alguns problemas que podem surgir.

Pré-requisitos

Este artigo será um guia passo a passo para você sobre como executar o PowerShell no seu computador local. Se você deseja acompanhar, certifique-se de ter os seguintes pré-requisitos em vigor antes de começar este artigo.

  • A Windows 10 computer with Administrator privileges.
  • Windows PowerShell versão 5 ou superior. Você também pode usar PowerShell v7. Este tutorial focará no Windows PowerShell, já que o sistema operacional Windows já o possui.
  • Qualquer editor de arquivo de texto

Lidando com a Política de Execução

Se esta é a primeira vez que você está tentando executar um script do Windows PowerShell, você pode encontrar um problema comum. O PowerShell provavelmente retornará uma mensagem de erro afirmando que um script “não pode ser carregado porque a execução de scripts está desabilitada neste sistema”.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.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
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

O PowerShell retorna a mensagem de erro acima quando você tenta executar um script do PowerShell com uma política de execução definida como Restrita, Assinatura Remota ou Todos Assinados.

Restrita

Restrita é a política padrão definida para computadores cliente Windows. Se você estiver usando o PowerShell pela primeira vez, é provável que sua política padrão esteja configurada para restringir todos os scripts.

Você ainda pode executar comandos individuais em um terminal, mas não um arquivo de script. A restrição inclui qualquer arquivo com terminação .ps1xml, .psm1 ou .ps1.

Não Restrita

Não restrita permite que você execute qualquer script, no entanto, ele avisa antes da execução se o script foi baixado da internet. Essa política geralmente é a padrão para dispositivos não-Windows.

Assinatura Remota

A política de Assinatura Remota permite que você execute qualquer script que seja (a) digitalmente assinado ou (b) qualquer script escrito em seu computador local com ou sem uma assinatura.

Se um script for baixado da internet e não estiver assinado, você precisará desbloquear o arquivo. Você pode fazer isso clicando com o botão direito no arquivo e escolhendo Propriedades. Ou, você pode usar o cmdlet do PowerShell Unblock-File para aquele arquivo de script específico.

Usar uma política de Assinatura Remota seria uma opção ideal ao executar um script baixado da internet.

Todos Assinados

Todos assinados exigem que todos os scripts sejam assinados digitalmente por um editor confiável. Isso inclui os scripts baixados da internet e escritos localmente em seu computador.

Alterando a Política de Execução do PowerShell

Para alterar a política de execução:

  1. Abra o Windows PowerShell com Executar como Administrador para garantir que você tenha as permissões mais altas para fazer as alterações na política.
Search PowerShell in Start Menu

2. Quando estiver aberto, execute o seguinte comando do PowerShell para definir a política de execução do seu computador. A política de execução, como mencionado anteriormente, pode ser um dos três tipos diferentes. Este tutorial está utilizando uma política de execução útil, porém ainda segura, chamada de RemoteSigned.

Como este tutorial presume que você baixou da Internet o arquivo de script GetServices.ps1, defina a política de execução como RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

A política de execução RemoteSigned obriga você a assinar criptograficamente cada script do PowerShell baixado da Internet antes que o PowerShell o execute no seu sistema.

3. Você deverá ver uma saída solicitando confirmar a ação. Digite Y e pressione Enter para confirmar a mudança de política.

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"): 

Neste ponto, siga os próximos passos para explorar diferentes métodos de executar o script do PowerShell no seu computador.

Como Executar um Script do PowerShell

Para demonstrar a execução de um script do PowerShell, você realmente precisa de um arquivo de script para executar! Se você não tiver um à mão, baixe este arquivo ZIP e extraia o arquivo PS1 dentro dele. Você encontrará um arquivo de script simples chamado GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Cada script do PowerShell deve terminar com a extensão .ps1.

Usando o Console

Assim que tiver um script pronto, existem algumas maneiras diferentes de executar um arquivo de script do PowerShell. Uma das maneiras mais comuns é via console do PowerShell.

Para fazer isso:

  1. Abra o console do PowerShell como mostrado acima.

2. Navegue até a localização do sistema de arquivos onde seu script está localizado usando o cmdlet PowerShell Set-Location ou o alias cd. O script deste tutorial está no diretório C:\Temp.

PS> cd C:\Temp\

3. Execute o script usando a notação de ponto (.). O PowerShell é um shell que também procura por nomes de comandos. Para diferenciar entre um comando do PowerShell e um script, você deve anteceder o script com um ponto. Este ponto representa o diretório atual.

 PS> .\GetServices.ps1

Como Executar um Script do PowerShell a partir da Linha de Comando via Localização do PowerShell

Se você não pode ou preferir não executar scripts via console do PowerShell, também pode fazê-lo com o bom e velho prompt de comando.

Para executar scripts via prompt de comando, primeiro você deve iniciar o executável do PowerShell (powershell.exe), com a localização do PowerShell em C:\Program Files\WindowsPowerShell\powershell.exe e então passar o caminho do script como parâmetro para ele.

Você pode executar scripts com parâmetros em qualquer contexto simplesmente especificando-os ao executar o executável do PowerShell, como powershell.exe -Parâmetro 'Foo' -Parâmetro2 'Bar'.

Ao abrir o cmd.exe, você pode executar um script do PowerShell como abaixo. Este exemplo está executando o motor e passando o caminho do script como C:\Temp\GetServices.ps1.

Observe abaixo que o exemplo está usando o caminho da localização do PowerShell para executar o script. Você precisará fazer isso se a pasta não estiver em algum lugar do seu PATH.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

A localização do PowerShell para o PowerShell 7 usa um executável diferente chamado pwsh.exe geralmente localizado em C:\Program Files\PowerShell\7\pwsh.exe.

Abaixo está um vídeo útil do YouTube que cobre a execução de um script via um arquivo em lote que o cmd.exe executa.

Usando o PowerShell ISE

Se você criar seus próprios scripts ou editar os de outros, provavelmente estará usando um editor de scripts como o PowerShell ISE ou talvez Visual Studio (VS) Code. Como o ISE vem com o Windows, vamos focar nesse método para este tutorial.

Para invocar um script via ISE:

  1. Acesse o Menu Iniciar, pesquise por PowerShell ISE e abra-o.
Search PowerShell ISE in Start Menu

2. Clique em ArquivoAbrir e encontre o seu script.

Open Script using File Menu

3. Com o script aberto, clique no botão verde de execução para executar o script. Este botão irá invocar o script no terminal integrado do PowerShell na parte inferior.

Run Script using PowerShell ISE

A Saída do Script de Exemplo

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Se você executar o script de exemplo GetServices.ps1, verá o seguinte. Este script executa o cmdlet Get-Service, que retorna todos os serviços instalados em seu computador Windows local.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Executando um Script PowerShell de Dentro de Outro Script

Vamos dizer que você tenha dois scripts e gostaria que um chamasse o outro. Talvez você tenha um script chamado GetUser.ps1 e outro chamado ResetPassword.ps1. Dentro do script GetUser.ps1, você gostaria de executar o ResetPassword.ps1 para redefinir a senha de um usuário.

Dentro do script chamador (GetUser.ps1), você adicionaria uma linha para executar o outro script da mesma forma que faria para chamar o script a partir da linha de comando.

Você pode ver abaixo que tem algumas opções. Normalmente, você deve escolher executar o outro script na mesma sessão ou escopo para simplificar as coisas, a menos que tenha uma razão específica para executar o script em outra sessão do PowerShell.

## Para executar o outro script em uma nova sessão
powershell.exe .\ResetPassword.ps1
## Para executar o outro script na mesma sessão
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/