Risoluzione dei problemi di esecuzione degli script PowerShell su Windows Server 2008 R2

Risoluzione dei problemi di esecuzione degli script PowerShell su Windows Server 2008 R2
Risoluzione dei problemi di esecuzione degli script PowerShell su Windows Server 2008 R2

Risoluzione dei problemi relativi alle restrizioni per l'esecuzione degli script PowerShell

Quando si lavora con Windows Server 2008 R2, gli utenti potrebbero riscontrare un errore che indica che l'esecuzione degli script PowerShell è disabilitata nel sistema. Questo problema può verificarsi quando si tenta di eseguire uno script tramite cmd.exe, anche dopo aver impostato la politica di esecuzione su Senza restrizioni.

Nonostante venga confermato che la policy di esecuzione è impostata su Illimitato, gli script potrebbero comunque non essere eseguiti, causando frustrazione e ostacolando il progresso. Questa guida esplorerà le cause comuni di questo problema e fornirà i passaggi per garantire la corretta esecuzione dello script.

Comando Descrizione
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force Imposta temporaneamente i criteri di esecuzione degli script su Ignora per la sessione corrente di PowerShell, consentendo l'esecuzione di tutti gli script senza restrizioni.
powershell -File .\Management_Install.ps1 Esegue il file di script di PowerShell specificato dalla riga di comando.
New-SelfSignedCertificate Crea un nuovo certificato autofirmato, che può essere usato per firmare gli script PowerShell per l'esecuzione attendibile.
Export-Certificate Esporta un certificato in un file, che può quindi essere importato in altri archivi certificati.
Import-Certificate Importa un certificato in un archivio certificati specificato, ad esempio editori attendibili o autorità di certificazione radice.
Set-AuthenticodeSignature Firma uno script PowerShell con un certificato specificato, consentendone l'esecuzione su sistemi con criteri di firma degli script abilitati.

Comprensione e implementazione dei criteri di esecuzione degli script in PowerShell

Gli script forniti mirano a risolvere il problema relativo alla disabilitazione dell'esecuzione degli script PowerShell su Windows Server 2008 R2. Il primo script imposta i criteri di esecuzione su **Bypass** per la sessione corrente di PowerShell utilizzando **Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force**. Questo comando consente l'esecuzione temporanea di tutti gli script senza restrizioni. Lo script passa quindi alla directory contenente lo script **Management_Install.ps1** e lo esegue utilizzando **powershell .Management_Install.ps1**. Questo approccio garantisce che la modifica della politica di esecuzione sia solo temporanea e non influisca sulla situazione di sicurezza complessiva del sistema.

Anche il secondo script, un file batch, imposta la politica di esecuzione su **Bypass** ma lo fa dalla riga di comando. Utilizza **powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force"** per raggiungere questo obiettivo. Dopo aver modificato i criteri di esecuzione, lo script passa alla directory dello script ed esegue lo script PowerShell utilizzando **powershell -File .Management_Install.ps1**. Lo script batch termina con un comando **pause** per mantenere aperta la finestra del prompt dei comandi, consentendo all'utente di visualizzare eventuali messaggi di output o di errore. Questo metodo è utile per automatizzare il processo e integrarlo in processi batch più ampi.

Firma degli script e sicurezza in PowerShell

Il terzo esempio di script illustra come firmare uno script PowerShell per conformarsi a criteri di esecuzione più rigorosi. Innanzitutto, viene creato un certificato autofirmato utilizzando **New-SelfSignedCertificate**. Questo certificato può quindi essere esportato con **Export-Certificate** e importato in archivi di certificati attendibili utilizzando **Import-Certificate**. Importando il certificato negli archivi **TrustedPublisher** e **Root**, il sistema considererà attendibili gli script firmati con questo certificato. Lo script **Management_Install.ps1** viene quindi firmato utilizzando **Set-AuthenticodeSignature**.

La firma degli script garantisce che solo gli script attendibili possano essere eseguiti sul sistema, fornendo un ulteriore livello di sicurezza. Questo approccio è particolarmente utile in ambienti con requisiti di sicurezza rigorosi in cui i criteri di esecuzione sono impostati su **AllSigned** o **RemoteSigned**. Firmando lo script, gli amministratori possono garantire che gli script non siano stati manomessi e provengano da una fonte attendibile, mitigando così i potenziali rischi per la sicurezza. Questo metodo combina sicurezza e funzionalità, consentendo l'esecuzione degli script necessari mantenendo l'integrità del sistema.

Impostazione dei criteri di esecuzione su Ignora in PowerShell

Script di 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

Utilizzo dello script batch per modificare i criteri di esecuzione ed eseguire lo script PowerShell

Scrittura batch

@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

Creazione di uno script PowerShell firmato

Script di PowerShell con firma

# 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

Garantire la conformità ai criteri di esecuzione degli script e la sicurezza del sistema

Quando si gestisce Windows Server 2008 R2, è fondamentale comprendere i diversi criteri di esecuzione disponibili in PowerShell e il modo in cui influiscono sull'esecuzione degli script. I criteri di esecuzione di PowerShell sono progettati per impedire l'esecuzione di script potenzialmente dannosi. Le quattro policy principali sono **Restricted**, **AllSigned**, **RemoteSigned** e **Unrestricted**. **Limitato** è la policy predefinita e non consente l'esecuzione di script. **AllSigned** richiede che tutti gli script e i file di configurazione siano firmati da un editore attendibile. **RemoteSigned** richiede che tutti gli script e i file di configurazione scaricati da Internet siano firmati da un editore attendibile, ma consente l'esecuzione degli script creati localmente senza firma.

Comprendere queste policy aiuta gli amministratori a scegliere il giusto livello di sicurezza per il proprio ambiente. Negli scenari in cui gli script devono essere eseguiti regolarmente, impostare la policy su **Senza restrizioni** può essere rischioso, poiché consente l'esecuzione di tutti gli script senza alcuna restrizione. Gli amministratori dovrebbero invece prendere in considerazione l'utilizzo di **RemoteSigned** o **AllSigned** per bilanciare sicurezza e funzionalità. Firmando gli script e gestendo i certificati, gli amministratori possono garantire che sui loro sistemi vengano eseguiti solo script attendibili, riducendo il rischio di eseguire codice dannoso.

Domande e risposte comuni sui criteri di esecuzione degli script PowerShell

  1. Come posso verificare la politica di esecuzione corrente sul mio sistema?
  2. Usa il comando Get-ExecutionPolicy in PowerShell per verificare la politica di esecuzione corrente.
  3. Come posso modificare in modo permanente la politica di esecuzione per tutti gli utenti?
  4. Usa il comando Set-ExecutionPolicy -ExecutionPolicy [PolicyName] -Scope LocalMachine per modificare la politica di esecuzione per tutti gli utenti.
  5. Cosa devo fare se incontro uno script che non può essere eseguito a causa di restrizioni legate alle policy?
  6. Imposta temporaneamente la policy su **Ignora** utilizzando Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process ed eseguire lo script.
  7. È sicuro utilizzare la politica **Illimitata**?
  8. L'utilizzo di **Senza restrizioni** non è consigliato per gli ambienti di produzione poiché consente l'esecuzione di tutti gli script, il che può rappresentare un rischio per la sicurezza.
  9. Come posso firmare uno script di PowerShell?
  10. Creare un certificato autofirmato utilizzando New-SelfSignedCertificate e quindi firmare lo script utilizzando Set-AuthenticodeSignature.
  11. Posso limitare l'esecuzione degli script solo agli script attendibili?
  12. Sì, impostando la policy di esecuzione su **AllSigned** o **RemoteSigned** e firmando i tuoi script.
  13. Qual è la differenza tra le policy **AllSigned** e **RemoteSigned**?
  14. **AllSigned** richiede che tutti gli script siano firmati da un editore attendibile, mentre **RemoteSigned** richiede che siano firmati solo gli script scaricati da Internet.
  15. Come posso creare un certificato autofirmato per la firma degli script?
  16. Usa il comando New-SelfSignedCertificate -DnsName "PowerShellLocalCert" -CertStoreLocation "Cert:\LocalMachine\My" per creare un certificato autofirmato.
  17. Quali sono i rischi per la sicurezza derivanti dalla disabilitazione delle policy di esecuzione degli script?
  18. La disabilitazione dei criteri di esecuzione degli script può esporre il sistema a script dannosi, con conseguenti potenziali violazioni della sicurezza e perdita di dati.

Punti chiave

Garantire la corretta policy di esecuzione di PowerShell è fondamentale per l'esecuzione di script su Windows Server 2008 R2. Impostazione della policy su Bypass oppure l'utilizzo di file batch può risolvere temporaneamente i problemi di esecuzione, ma la firma degli script offre una soluzione più sicura e a lungo termine. Gli amministratori dovrebbero essere consapevoli delle implicazioni sulla sicurezza delle diverse policy di esecuzione e implementare misure che bilanciano la sicurezza con le esigenze operative.