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.

5,0

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow