Felsökning av körningsbegränsningar för PowerShell-skript
När du arbetar med Windows Server 2008 R2 kan användare stöta på ett fel som indikerar att körningen av PowerShell-skript är inaktiverad på systemet. Det här problemet kan uppstå när du försöker köra ett skript via cmd.exe, även efter att körningspolicyn har ställts in på Obegränsad.
Trots att exekveringspolicyn är inställd på Obegränsad, kan skript fortfarande misslyckas att köra, vilket orsakar frustration och hindrar framsteg. Den här guiden kommer att undersöka de vanliga orsakerna till detta problem och tillhandahålla steg för att säkerställa framgångsrik skriptkörning.
Kommando | Beskrivning |
---|---|
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force | Ställer tillfälligt in skriptkörningspolicyn till Bypass för den aktuella PowerShell-sessionen, vilket tillåter exekvering av alla skript utan begränsningar. |
powershell -File .\Management_Install.ps1 | Kör den angivna PowerShell-skriptfilen från kommandoraden. |
New-SelfSignedCertificate | Skapar ett nytt självsignerat certifikat, som kan användas för att signera PowerShell-skript för tillförlitlig körning. |
Export-Certificate | Exporterar ett certifikat till en fil som sedan kan importeras till andra certifikatlager. |
Import-Certificate | Importerar ett certifikat till ett specificerat certifikatlager, till exempel Trusted Publishers eller Root Certification Authorities. |
Set-AuthenticodeSignature | Signerar ett PowerShell-skript med ett specificerat certifikat, vilket gör att det kan köras på system med skriptsigneringsprinciper aktiverade. |
Förstå och implementera skriptexekveringspolicyer i PowerShell
Skripten som tillhandahålls syftar till att lösa problemet med att PowerShell-skriptkörning avaktiveras på Windows Server 2008 R2. Det första skriptet ställer in körningspolicyn till Bypass för den aktuella PowerShell-sessionen med Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force. Detta kommando låter alla skript köras utan begränsning tillfälligt. Skriptet navigerar sedan till katalogen som innehåller skriptet Management_Install.ps1 och kör det med powershell .Management_Install.ps1. Detta tillvägagångssätt säkerställer att ändringen av exekveringspolicyn endast är tillfällig och inte påverkar systemets övergripande säkerhetsställning.
Det andra skriptet, en batchfil, ställer också in körningspolicyn till Bypass men gör det från kommandoraden. Den använder powershell -Kommando "Set-ExecutionPolicy Bypass -Scope Process -Force" för att uppnå detta. Efter att ha ändrat körningsprincipen navigerar skriptet till skriptkatalogen och kör PowerShell-skriptet med powershell -File .Management_Install.ps1. Batchskriptet avslutas med ett paus-kommando för att hålla kommandotolksfönstret öppet, så att användaren kan se alla utdata eller felmeddelanden. Denna metod är användbar för att automatisera processen och integrera den i större batchprocesser.
Skriptsignering och säkerhet i PowerShell
Det tredje skriptexemplet visar hur man signerar ett PowerShell-skript för att följa striktare exekveringspolicyer. Först skapas ett självsignerat certifikat med New-SelfSignedCertificate. Detta certifikat kan sedan exporteras med Export-Certificate och importeras till betrodda certifikatarkiv med Import-Certificate. Genom att importera certifikatet till TrustedPublisher- och Root-butikerna kommer systemet att lita på skript som är signerade med detta certifikat. Skriptet Management_Install.ps1 signeras sedan med Set-AuthenticodeSignature.
Skriptsignering säkerställer att endast betrodda skript kan köras på systemet, vilket ger ett extra lager av säkerhet. Det här tillvägagångssättet är särskilt användbart i miljöer med stränga säkerhetskrav där exekveringspolicyer är inställda på AllSigned eller RemoteSigned. Genom att signera skriptet kan administratörer säkerställa att skripten inte manipuleras och kommer från en pålitlig källa, vilket minskar potentiella säkerhetsrisker. Denna metod kombinerar säkerhet med funktionalitet, vilket gör att nödvändiga skript kan köras samtidigt som systemets integritet bibehålls.
Ställa in exekveringspolicy för att kringgå i PowerShell
PowerShell-skript
# 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
Använda batchskript för att ändra exekveringspolicy och köra PowerShell-skript
Batch Script
@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
Skapa ett signerat PowerShell-skript
PowerShell-skript med signering
# 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
Säkerställa skriptexekveringspolicy och systemsäkerhet
När du hanterar Windows Server 2008 R2 är det viktigt att förstå de olika körningsprinciperna som finns tillgängliga i PowerShell och hur de påverkar skriptkörningen. PowerShell-körningspolicyer är utformade för att förhindra exekvering av potentiellt skadliga skript. De fyra huvudpolicyerna är Restricted, All Signed, Remote Signed och Orestricted. Begränsad är standardpolicyn och tillåter inte att några skript körs. AllSigned kräver att alla skript och konfigurationsfiler signeras av en betrodd utgivare. RemoteSigned kräver att alla skript och konfigurationsfiler som laddas ner från internet är signerade av en betrodd utgivare, men tillåter lokalt skapade skript att köras utan en signatur.
Att förstå dessa policyer hjälper administratörer att välja rätt säkerhetsnivå för sin miljö. I scenarier där skript behöver köras regelbundet kan det vara riskabelt att sätta policyn på Obegränsad, eftersom det tillåter alla skript att köras utan några begränsningar. Istället bör administratörer överväga att använda RemoteSigned eller AllSigned för att balansera säkerhet med funktionalitet. Genom att signera skript och hantera certifikat kan administratörer säkerställa att endast betrodda skript körs på deras system, vilket minskar risken för att köra skadlig kod.
- Hur kontrollerar jag den aktuella körningspolicyn på mitt system?
- Använd kommandot i PowerShell för att kontrollera den aktuella körningspolicyn.
- Hur kan jag permanent ändra exekveringspolicyn för alla användare?
- Använd kommandot för att ändra exekveringspolicyn för alla användare.
- Vad ska jag göra om jag stöter på ett skript som inte kan köras på grund av policybegränsningar?
- Ställ tillfälligt in policyn på Kan förbi med hjälp av och kör skriptet.
- Är det säkert att använda policyn Obegränsad?
- Att använda Obegränsat rekommenderas inte för produktionsmiljöer eftersom det tillåter alla skript att köras, vilket kan vara en säkerhetsrisk.
- Hur signerar jag ett PowerShell-skript?
- Skapa ett självsignerat certifikat med och signera sedan skriptet med .
- Kan jag begränsa körning av skript till att endast betro skript?
- Ja, genom att ställa in exekveringspolicyn till AllSigned eller RemoteSigned och signera dina skript.
- Vad är skillnaden mellan policyerna AllSigned och RemoteSigned?
- AllSigned kräver att alla skript är signerade av en betrodd utgivare, medan RemoteSigned endast kräver att skript som laddats ner från internet är signerade.
- Hur skapar jag ett självsignerat certifikat för skriptsignering?
- Använd kommandot för att skapa ett självsignerat certifikat.
- Vilka är säkerhetsriskerna med att inaktivera skriptkörningspolicyer?
- Om du inaktiverar skriptkörningspolicyer kan ditt system utsättas för skadliga skript, vilket kan leda till potentiella säkerhetsintrång och dataförlust.
Att säkerställa korrekt PowerShell-exekveringspolicy är avgörande för att köra skript på Windows Server 2008 R2. Ange policyn till eller att använda batchfiler kan tillfälligt lösa exekveringsproblem, men signering av skript erbjuder en säkrare, långsiktig lösning. Administratörer bör vara medvetna om säkerhetskonsekvenserna av olika exekveringspolicyer och implementera åtgärder som balanserar säkerhet med operativa behov.