Resolvendo problemas de execução de scripts do PowerShell no Windows Server 2008 R2

PowerShell

Solução de problemas de restrições de execução de script do PowerShell

Ao trabalhar com o Windows Server 2008 R2, os usuários podem encontrar um erro indicando que a execução de scripts do PowerShell está desabilitada no sistema. Esse problema pode surgir ao tentar executar um script via cmd.exe, mesmo depois de definir a política de execução como Irrestrita.

Apesar de confirmar que a política de execução está definida como Irrestrita, os scripts ainda podem falhar na execução, causando frustração e dificultando o progresso. Este guia explorará as causas comuns desse problema e fornecerá etapas para garantir a execução bem-sucedida do script.

Comando Descrição
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force Define temporariamente a política de execução de scripts como Ignorar para a sessão atual do PowerShell, permitindo a execução de todos os scripts sem restrições.
powershell -File .\Management_Install.ps1 Executa o arquivo de script do PowerShell especificado na linha de comando.
New-SelfSignedCertificate Cria um novo certificado autoassinado, que pode ser usado para assinar scripts do PowerShell para execução confiável.
Export-Certificate Exporta um certificado para um arquivo, que pode então ser importado para outros armazenamentos de certificados.
Import-Certificate Importa um certificado para um armazenamento de certificados especificado, como Editores Confiáveis ​​ou Autoridades de Certificação Raiz.
Set-AuthenticodeSignature Assina um script do PowerShell com um certificado especificado, permitindo que ele seja executado em sistemas com políticas de assinatura de script habilitadas.

Compreendendo e implementando políticas de execução de script no PowerShell

Os scripts fornecidos visam resolver o problema de desativação da execução de scripts do PowerShell no Windows Server 2008 R2. O primeiro script define a política de execução como Bypass para a sessão atual do PowerShell usando Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force. Este comando permite que todos os scripts sejam executados sem restrições temporariamente. O script então navega até o diretório que contém o script Management_Install.ps1 e o executa usando powershell .Management_Install.ps1. Esta abordagem garante que a alteração da política de execução seja apenas temporária e não afete a postura geral de segurança do sistema.

O segundo script, um arquivo em lote, também define a política de execução como Bypass, mas faz isso na linha de comando. Ele usa powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force" para conseguir isso. Depois de alterar a política de execução, o script navega até o diretório de script e executa o script do PowerShell usando powershell -File .Management_Install.ps1. O script em lote termina com um comando pause para manter a janela do prompt de comando aberta, permitindo que o usuário veja qualquer saída ou mensagens de erro. Este método é útil para automatizar o processo e integrá-lo em processos em lote maiores.

Assinatura de script e segurança no PowerShell

O terceiro exemplo de script demonstra como assinar um script do PowerShell para cumprir políticas de execução mais rigorosas. Primeiro, um certificado autoassinado é criado usando New-SelfSignedCertificate. Este certificado pode então ser exportado com Export-Certificate e importado para armazenamentos de certificados confiáveis ​​usando Import-Certificate. Ao importar o certificado para os armazenamentos TrustedPublisher e Root, o sistema confiará nos scripts assinados com este certificado. O script Management_Install.ps1 é então assinado usando Set-AuthenticodeSignature.

A assinatura de scripts garante que apenas scripts confiáveis ​​possam ser executados no sistema, fornecendo uma camada adicional de segurança. Essa abordagem é particularmente útil em ambientes com requisitos de segurança rigorosos, onde as políticas de execução são definidas como AllSigned ou RemoteSigned. Ao assinar o script, os administradores podem garantir que os scripts não sejam adulterados e sejam provenientes de uma fonte confiável, mitigando assim possíveis riscos de segurança. Este método combina segurança com funcionalidade, permitindo a execução de scripts necessários enquanto mantém a integridade do sistema.

Configurando Política de Execução para Ignorar no PowerShell

Script do PowerShell

# Ensure the script execution policy is set to Bypass
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force

# Navigate to the script directory
cd "C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts"

# Execute the PowerShell script
powershell .\Management_Install.ps1

Usando script em lote para modificar a política de execução e executar o script do PowerShell

Script em lote

@echo off

:: Set PowerShell execution policy to Bypass
powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force"

:: Navigate to the script directory
cd "C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts"

:: Run the PowerShell script
powershell -File .\Management_Install.ps1

pause

Criando um script PowerShell assinado

Script do PowerShell com assinatura

# Sample script content
Write-Output "Executing Management Install Script"

# Save this script as Management_Install.ps1

# To sign the script, follow these steps:
# 1. Create a self-signed certificate (if you don't have one)
$cert = New-SelfSignedCertificate -DnsName "PowerShellLocalCert" -CertStoreLocation "Cert:\LocalMachine\My"

# 2. Export the certificate to a file
Export-Certificate -Cert $cert -FilePath "C:\PowerShellLocalCert.cer"

# 3. Import the certificate to Trusted Publishers and Trusted Root Certification Authorities
Import-Certificate -FilePath "C:\PowerShellLocalCert.cer" -CertStoreLocation "Cert:\LocalMachine\TrustedPublisher"
Import-Certificate -FilePath "C:\PowerShellLocalCert.cer" -CertStoreLocation "Cert:\LocalMachine\Root"

# 4. Sign the script with the certificate
Set-AuthenticodeSignature -FilePath .\Management_Install.ps1 -Certificate $cert

Garantindo a conformidade da política de execução de scripts e a segurança do sistema

Ao gerenciar o Windows Server 2008 R2, é crucial compreender as diferentes políticas de execução disponíveis no PowerShell e como elas impactam a execução de scripts. As políticas de execução do PowerShell foram projetadas para impedir a execução de scripts potencialmente prejudiciais. As quatro políticas principais são Restricted, AllSigned, RemoteSigned e Unrestricted. Restrito é a política padrão e não permite a execução de nenhum script. AllSigned exige que todos os scripts e arquivos de configuração sejam assinados por um editor confiável. RemoteSigned exige que todos os scripts e arquivos de configuração baixados da Internet sejam assinados por um editor confiável, mas permite que scripts criados localmente sejam executados sem assinatura.

A compreensão dessas políticas ajuda os administradores a escolher o nível certo de segurança para seu ambiente. Em cenários em que os scripts precisam ser executados regularmente, definir a política como Irrestrita pode ser arriscado, pois permite que todos os scripts sejam executados sem quaisquer restrições. Em vez disso, os administradores devem considerar o uso de RemoteSigned ou AllSigned para equilibrar segurança com funcionalidade. Ao assinar scripts e gerenciar certificados, os administradores podem garantir que apenas scripts confiáveis ​​sejam executados em seus sistemas, reduzindo o risco de execução de código malicioso.

  1. Como verifico a política de execução atual em meu sistema?
  2. Use o comando no PowerShell para verificar a política de execução atual.
  3. Como posso alterar permanentemente a política de execução para todos os usuários?
  4. Use o comando para alterar a política de execução para todos os usuários.
  5. O que devo fazer se encontrar um script que não possa ser executado devido a restrições de política?
  6. Defina temporariamente a política como Ignorar usando e execute o script.
  7. É seguro usar a política Irrestrita?
  8. O uso de Irrestrito não é recomendado para ambientes de produção, pois permite a execução de todos os scripts, o que pode ser um risco à segurança.
  9. Como assino um script do PowerShell?
  10. Crie um certificado autoassinado usando e então assine o script usando .
  11. Posso restringir a execução de scripts apenas a scripts confiáveis?
  12. Sim, definindo a política de execução como AllSigned ou RemoteSigned e assinando seus scripts.
  13. Qual é a diferença entre as políticas AllSigned e RemoteSigned?
  14. AllSigned exige que todos os scripts sejam assinados por um editor confiável, enquanto RemoteSigned exige apenas que scripts baixados da Internet sejam assinados.
  15. Como posso criar um certificado autoassinado para assinatura de script?
  16. Use o comando para criar um certificado autoassinado.
  17. Quais são os riscos de segurança decorrentes da desativação das políticas de execução de scripts?
  18. Desabilitar políticas de execução de scripts pode expor seu sistema a scripts maliciosos, levando a possíveis violações de segurança e perda de dados.

Garantir a política de execução correta do PowerShell é crucial para a execução de scripts no Windows Server 2008 R2. Definir a política para ou usar arquivos em lote pode resolver temporariamente problemas de execução, mas assinar scripts oferece uma solução mais segura e de longo prazo. Os administradores devem estar cientes das implicações de segurança das diferentes políticas de execução e implementar medidas que equilibrem a segurança com as necessidades operacionais.