PowerShell
Skripte signieren
Suche…
Bemerkungen
Durch das Signieren eines Skripts werden Ihre Skripts mit allen Exeuktionsrichtlinien in PowerShell übereinstimmen und die Integrität eines Skripts sicherstellen. Signierte Skripts können nicht ausgeführt werden, wenn sie nach dem Signieren geändert wurden.
Die Skriptsignierung erfordert ein Codesignaturzertifikat. Empfehlungen:
- Persönliche Skripts / Tests (nicht freigegeben): Zertifikat einer vertrauenswürdigen Zertifizierungsstelle (intern oder von Drittanbietern) ODER ein selbstsigniertes Zertifikat.
- Freigegebene Organisation: Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (intern oder von Drittanbietern)
- Freigegebene externe Organisation: Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle eines Dritten
Lesen Sie mehr bei about_Signing @ TechNet
Ausführungsrichtlinien
PowerShell verfügt über konfigurierbare Ausführungsrichtlinien, die festlegen, unter welchen Bedingungen ein Skript oder eine Konfiguration ausgeführt werden soll. Eine Ausführungsrichtlinie kann für mehrere Bereiche festgelegt werden. Computer, aktueller Benutzer und aktueller Prozess. Ausführungsrichtlinien können leicht umgangen werden und sind nicht dazu gedacht, Benutzer einzuschränken, sondern sie vor unbeabsichtigten Verstößen gegen Signaturrichtlinien zu schützen.
Die verfügbaren Richtlinien sind:
Rahmen | Beschreibung |
---|---|
Beschränkt | Keine Skripte erlaubt |
AllSigned | Alle Skripte müssen signiert sein |
RemoteSigned | Alle lokalen Skripte erlaubt; Nur signierte Remote-Skripte |
Uneingeschränkt | Keine anforderungen Alle Skripts sind erlaubt, werden jedoch gewarnt, bevor Skripts ausgeführt werden, die aus dem Internet heruntergeladen wurden |
Bypass | Alle Skripts sind zulässig und es werden keine Warnungen angezeigt |
Nicht definiert | Entfernen Sie die aktuelle Ausführungsrichtlinie für den aktuellen Bereich. Verwendet die übergeordnete Richtlinie. Wenn alle Richtlinien undefiniert sind, werden eingeschränkt verwendet. |
Sie können die aktuellen Ausführungsrichtlinien mit Set-ExecutionPolicy
-cmdlet, Gruppenrichtlinien oder dem Parameter -ExecutionPolicy
, wenn Sie einen powershell.exe
Prozess starten.
Weitere Informationen finden Sie unter about_Execution_Policies @ TechNet
Skript signieren
Das Signieren eines Skripts erfolgt mithilfe des Set-AuthenticodeSignature
-cmdlet und eines Codesignaturzertifikats.
#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
Sie können ein Zertifikat auch aus einer .pfx
Datei lesen:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Das Skript ist gültig, bis das Zertifikat abläuft. Wenn Sie beim Signieren einen Zeitstempelserver verwenden, bleibt das Skript auch nach Ablauf des Zertifikats gültig. Es ist auch nützlich, die Vertrauenskette für das Zertifikat (einschließlich der Root-Berechtigung) hinzuzufügen, um den meisten Computern zu helfen, dem Zertifikat zu vertrauen, das zum Signieren des Skripts verwendet wird.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Es wird empfohlen, einen Zeitstempelserver eines vertrauenswürdigen Zertifikatsanbieters wie Verisign, Comodo, Thawte usw. zu verwenden.
Ändern der Ausführungsrichtlinie mit Set-ExecutionPolicy
Verwenden Sie zum Ändern der Ausführungsrichtlinie für den Standardbereich (LocalMachine) Folgendes:
Set-ExecutionPolicy AllSigned
Verwenden Sie zum Ändern der Richtlinie für einen bestimmten Bereich Folgendes:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Sie können die -Force
unterdrücken, indem Sie den -Force
Schalter hinzufügen.
Umgehung der Ausführungsrichtlinie für ein einzelnes Skript
Häufig müssen Sie möglicherweise ein nicht signiertes Skript ausführen, das nicht der aktuellen Ausführungsrichtlinie entspricht. Dies lässt sich leicht erreichen, indem die Ausführungsrichtlinie für diesen einzelnen Prozess umgangen wird. Beispiel:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Oder Sie können die Abkürzung verwenden:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Andere Ausführungsrichtlinien:
Politik | Beschreibung |
---|---|
AllSigned | Es können nur Skripts ausgeführt werden, die von einem vertrauenswürdigen Herausgeber signiert wurden. |
Bypass | Keine Einschränkungen; Alle Windows PowerShell-Skripts können ausgeführt werden. |
Default | Normalerweise RemoteSigned , wird aber über RemoteSigned gesteuert |
RemoteSigned | Heruntergeladene Skripts müssen vor der Ausführung von einem vertrauenswürdigen Herausgeber signiert werden. |
Restricted | Es können keine Skripts ausgeführt werden. Windows PowerShell kann nur im interaktiven Modus verwendet werden. |
Undefined | N / A |
Unrestricted * | Ähnlich wie bypass |
Unrestricted*
Vorsichtsmaßnahme: Wenn Sie ein nicht signiertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung zur Genehmigung aufgefordert.
Weitere Informationen erhalten Sie hier .
Rufen Sie die aktuelle Ausführungsrichtlinie ab
Abrufen der effektiven Ausführungsrichtlinie für die aktuelle Sitzung:
PS> Get-ExecutionPolicy
RemoteSigned
Alle effektiven Ausführungsrichtlinien für die aktuelle Sitzung auflisten:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Listen Sie die Ausführungsrichtlinie für einen bestimmten Bereich auf, z. verarbeiten:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Signatur von einem signierten Skript abrufen
Rufen Sie mithilfe des Get-AuthenticodeSignature
-cmdlet Informationen zur Authenticode-Signatur aus einem signierten Skript ab:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Erstellen eines selbstsignierten Codesignaturzertifikats zum Testen
Beim Signieren persönlicher Skripts oder beim Testen der Codesignierung kann es hilfreich sein, ein selbstsigniertes Codesignaturzertifikat zu erstellen.
Ab PowerShell 5.0 können Sie ein New-SelfSignedCertificate
Codesignierungszertifikat mithilfe des New-SelfSignedCertificate
-cmdlet generieren:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
In früheren Versionen können Sie ein selbstsigniertes Zertifikat mithilfe des Tools " makecert.exe
im .NET Framework SDK und Windows SDK erstellen.
Ein selbstsigniertes Zertifikat wird nur von Computern als vertrauenswürdig eingestuft, auf denen das Zertifikat installiert ist. Für gemeinsam genutzte Skripts wird ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (interner oder vertrauenswürdiger Drittanbieter) empfohlen.