PowerShell
Scripts ondertekenen
Zoeken…
Opmerkingen
Door een script te ondertekenen, voldoen uw scripts aan alle uitscheidingsbeleid in PowerShell en wordt de integriteit van een script gewaarborgd. Ondertekende scripts kunnen niet worden uitgevoerd als ze zijn gewijzigd nadat ze zijn ondertekend.
Ondertekening van scripts vereist een certificaat voor ondertekening van code. aanbevelingen:
- Persoonlijke scripts / testen (niet gedeeld): certificaat van vertrouwde certificeringsinstantie (intern of van derden) OF een zelfondertekend certificaat.
- Gedeeld binnen organisatie: certificaat van vertrouwde gecertificeerde autoriteit (intern of derde partij)
- Gedeelde externe organisatie: certificaat van vertrouwde externe certificeringsinstantie
Lees meer op about_Signing @ TechNet
Uitvoeringsbeleid
PowerShell heeft configureerbaar uitvoeringsbeleid dat bepaalt welke voorwaarden vereist zijn om een script of configuratie uit te voeren. Een uitzonderingsbeleid kan worden ingesteld voor meerdere scopes; computer, huidige gebruiker en huidig proces. Het uitvoeringsbeleid kan eenvoudig worden omzeild en is niet bedoeld om gebruikers te beperken, maar beschermt hen tegen onbedoeld overtreden van het ondertekeningsbeleid.
Het beschikbare beleid is:
omgeving | Beschrijving |
---|---|
Beperkt | Geen scripts toegestaan |
AllSigned | Alle scripts moeten worden ondertekend |
RemoteSigned | Alle lokale scripts toegestaan; alleen ondertekende externe scripts |
onbeperkt | Geen vereisten. Alle scripts toegestaan, maar waarschuwen voordat scripts worden uitgevoerd die zijn gedownload van internet |
bypass | Alle scripts zijn toegestaan en er worden geen waarschuwingen weergegeven |
onbepaald | Verwijder het huidige uitvoeringsbeleid voor het huidige bereik. Gebruikt het bovenliggende beleid. Als alle beleidsregels niet zijn gedefinieerd, wordt beperkt gebruikt. |
U kunt het huidige uitvoeringsbeleid wijzigen met Set-ExecutionPolicy
-cmdlet, Groepsbeleid of de parameter -ExecutionPolicy
wanneer u een powershell.exe
proces start.
Lees meer op about_Execution_Policies @ TechNet
Een script ondertekenen
Het ondertekenen van een script gebeurt met behulp van de Set-AuthenticodeSignature
-cmdlet en een code-signing-certificaat.
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
Je kunt ook een certificaat uit een .pfx
-bestand lezen met:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Het script is geldig totdat het cetificaat verloopt. Als u tijdens de ondertekening een tijdstempel-server gebruikt, blijft het script geldig nadat het certificaat is verlopen. Het is ook nuttig om de vertrouwensketen voor het certificaat (inclusief root-autoriteit) toe te voegen om de meeste computers te helpen vertrouwen op het certificaat dat is gebruikt om het script te ondertekenen.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Het wordt aanbevolen om een tijdstempel-server te gebruiken van een vertrouwde certificaataanbieder zoals Verisign, Comodo, Thawte etc.
Het uitvoeringsbeleid wijzigen met Set-ExecutionPolicy
Gebruik het volgende om het uitvoeringsbeleid voor het standaardbereik (LocalMachine) te wijzigen:
Set-ExecutionPolicy AllSigned
Gebruik het volgende om het beleid voor een specifiek bereik te wijzigen:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
U kunt de aanwijzingen onderdrukken door de schakelaar -Force
toe te voegen.
Het uitvoeringsbeleid omzeilen voor een enkel script
Vaak moet u een niet-ondertekend script uitvoeren dat niet voldoet aan het huidige uitvoeringsbeleid. Een eenvoudige manier om dit te doen is door het uitvoeringsbeleid voor dat ene proces te omzeilen. Voorbeeld:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Of u kunt de afkorting gebruiken:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Ander uitvoeringsbeleid:
Het beleid | Beschrijving |
---|---|
AllSigned | Alleen scripts ondertekend door een vertrouwde uitgever kunnen worden uitgevoerd. |
Bypass | Geen beperkingen; alle Windows PowerShell-scripts kunnen worden uitgevoerd. |
Default | Normaal RemoteSigned , maar wordt bestuurd via ActiveDirectory |
RemoteSigned | Gedownloade scripts moeten zijn ondertekend door een vertrouwde uitgever voordat ze kunnen worden uitgevoerd. |
Restricted | Er kunnen geen scripts worden uitgevoerd. Windows PowerShell kan alleen in de interactieve modus worden gebruikt. |
Undefined | NA |
Unrestricted * | Gelijk aan bypass |
Unrestricted*
Waarschuwing: als u een niet-ondertekend script uitvoert dat is gedownload van internet, wordt u om toestemming gevraagd voordat het wordt uitgevoerd.
Meer informatie hier beschikbaar.
Download het huidige uitvoeringsbeleid
Het effectieve uitvoeringsbeleid voor de huidige sessie verkrijgen:
PS> Get-ExecutionPolicy
RemoteSigned
Lijst alle effectieve uitvoeringsbeleidslijnen voor de huidige sessie:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Maak een lijst van het uitvoeringsbeleid voor een specifiek bereik, bijv. werkwijze:
PS> Get-ExecutionPolicy -Scope Process
Undefined
De handtekening verkrijgen van een ondertekend script
Krijg informatie over de Authenticode-handtekening van een ondertekend script met behulp van de Get-AuthenticodeSignature
-cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Een zelfondertekend certificaat voor het ondertekenen van codes maken voor testen
Bij het ondertekenen van persoonlijke scripts of bij het testen van code-ondertekening kan het handig zijn om een zelf-ondertekend code-handtekeningcertificaat te maken.
Vanaf PowerShell 5.0 kunt u een zelfondertekend certificaat voor het ondertekenen van codes genereren met behulp van het New-SelfSignedCertificate
-cmdlet:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
In eerdere versies kunt u een zelfondertekend certificaat maken met het hulpmiddel makecert.exe
in de .NET Framework SDK en Windows SDK.
Een zelfondertekend certificaat wordt alleen vertrouwd door computers die het certificaat hebben geïnstalleerd. Voor scripts die worden gedeeld, wordt een certificaat van een vertrouwde certificeringsinstantie (interne of vertrouwde derde partij) aanbevolen.