Set-AuthenticodeSignature
Fügt einem PowerShell-Skript oder einer anderen Datei eine Authenticode-Signatur hinzu.
Syntax
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-FilePath] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-LiteralPath <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Dieses Cmdlet ist nur auf der Windows-Plattform verfügbar.
Das Set-AuthenticodeSignature
Cmdlet fügt jeder Datei, die das Subject Interface Package (SIP) unterstützt, eine Authenticode-Signatur hinzu.
In einer PowerShell-Skriptdatei hat die Signatur die Form eines Textblocks, der das Ende der Anweisungen angibt, die im Skript ausgeführt werden. Wenn beim Ausführen dieses Cmdlets eine Signatur in der Datei vorhanden ist, wird die Signatur entfernt.
Beispiele
Beispiel 1: Signieren eines Skripts mithilfe eines Zertifikats aus dem lokalen Zertifikatspeicher
Mit diesen Befehlen wird ein Codesignaturzertifikat vom PowerShell-Zertifikatanbieter abgerufen und zum Signieren eines PowerShell-Skripts verwendet.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
Der erste Befehl verwendet das Get-ChildItem
Cmdlet und den PowerShell-Zertifikatanbieter, um die Zertifikate im Cert:\CurrentUser\My
Unterverzeichnis des Zertifikatspeichers abzurufen. Das Cert:
Laufwerk ist das Laufwerk, das vom Zertifikatanbieter verfügbar gemacht wird. Der CodeSigningCert-Parameter , der nur vom Zertifikatanbieter unterstützt wird, schränkt die abgerufenen Zertifikate auf diejenigen mit Codesignaturautorität ein. Der Befehl speichert das Ergebnis in der $cert
Variablen.
Der zweite Befehl verwendet das Set-AuthenticodeSignature
Cmdlet, um das Skript zu signieren PSTestInternet2.ps1
. Sie verwendet den FilePath-Parameter , um den Namen des Skripts und den Certificate-Parameter anzugeben, um anzugeben, dass das Zertifikat in der $cert
Variablen gespeichert wird.
Hinweis
Wenn Sie den CodeSigningCert-Parameter verwenden Get-ChildItem
, werden nur Zertifikate zurückgegeben, die über eine Codesignaturberechtigung verfügen und einen privaten Schlüssel enthalten. Wenn kein privater Schlüssel vorhanden ist, können die Zertifikate nicht zum Signieren verwendet werden.
Beispiel 2: Signieren eines Skripts mithilfe eines Zertifikats aus einer PFX-Datei
Diese Befehle verwenden das Get-PfxCertificate
Cmdlet, um ein Codesignaturzertifikat zu laden. Verwenden Sie sie dann, um ein PowerShell-Skript zu signieren.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert
Der erste Befehl verwendet das Get-PfxCertificate
Cmdlet, um das Zertifikat C:\Test\MySign.pfx in die $cert
Variable zu laden.
Der zweite Befehl wird verwendet Set-AuthenticodeSignature
, um das Skript zu signieren. Der FilePath-Parameter von Set-AuthenticodeSignature
gibt den Pfad zur zu signierten Skriptdatei an, und der Cert-Parameter übergibt die $cert
Variable, die das Zertifikat enthält, an Set-AuthenticodeSignature
.
Wenn die Zertifikatdatei kennwortgeschützter Ist, werden Sie von PowerShell zur Eingabe des Kennworts aufgefordert.
Beispiel 3: Hinzufügen einer Signatur, die die Stammautorität enthält
Dieser Befehl fügt eine digitale Signatur hinzu, die die Stammzertifizierungsstelle in der Vertrauenskette enthält, und wird von einem Zeitstempelserver eines Drittanbieters signiert.
Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"
Der Befehl verwendet den FilePath-Parameter , um das zu signierte Skript und den Certificate-Parameter anzugeben, um das Zertifikat anzugeben, das in der $cert
Variablen gespeichert ist. Er verwendet den IncludeChain-Parameter , um alle Signaturen in die Vertrauenskette einzuschließen, einschließlich der Stammautorität. Außerdem wird der TimeStampServer-Parameter verwendet, um der Signatur einen Zeitstempel hinzuzufügen.
Dadurch wird verhindert, dass das Skript bei Ablauf des Zertifikats einen Fehler verursacht.
Parameter
-Certificate
Gibt das Zertifikat an, das verwendet wird, um das Skript oder die Datei zu signieren. Geben Sie eine Variable ein, die ein Objekt speichert, das das Zertifikat oder einen Ausdruck darstellt, der das Zertifikat abruft.
Verwenden Oder verwenden Sie Get-PfxCertificate
das Cmdlet auf dem Get-ChildItem
Zertifikatlaufwerk Cert:
, um ein Zertifikat zu finden. Wenn das Zertifikat ungültig ist oder über keine code-signing
Autorität verfügt, schlägt der Befehl fehl.
Type: | X509Certificate2 |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Confirm
Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Content
Dieser Parameter wird in der Syntaxauflistung angezeigt, da er in der Basisklasse definiert ist, die Set-AuthenticodeSignature
von abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht in Set-AuthenticodeSignature
implementiert.
Type: | Byte[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-FilePath
Gibt den Pfad zu einer Datei an, die signiert wird.
Type: | String[] |
Position: | 1 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Ermöglicht es dem Cmdlet, eine Signatur an eine schreibgeschützte Datei anzufügen. Selbst mit dem Force-Parameter kann das Cmdlet keine Sicherheitseinschränkungen außer Kraft setzen.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HashAlgorithm
Gibt den Hashalgorithmus an, den Windows verwendet, um die digitale Signatur für die Datei zu berechnen.
Für PowerShell 7.3 ist der Standardwert SHA256, d. h. der Windows-Standardhashingalgorithmus. Für frühere Versionen ist der Standardwert SHA1. Dateien, die mit einem anderen Hashalgorithmus signiert sind, werden auf anderen Systemen möglicherweise nicht erkannt. Welche Algorithmen unterstützt werden, hängt von der Version des Betriebssystems ab.
Eine Liste der möglichen Werte finden Sie unter HashAlgorithmName Struct.
Type: | String |
Position: | Named |
Default value: | SHA256 |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeChain
Bestimmt, welche Zertifikate in der Zertifikatvertrauenskette in der digitalen Signatur enthalten sind. NotRoot ist der Standardwert.
Gültige Werte sind:
- Signierer: Enthält nur das Zertifikat des Signierers.
- NotRoot: Enthält alle Zertifikate in der Zertifikatkette mit Ausnahme der Stammautorität.
- Alle: Enthält alle Zertifikate in der Zertifikatkette.
Type: | String |
Position: | Named |
Default value: | NotRoot |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LiteralPath
Gibt den Pfad zu einer Datei an, die signiert wird. Im Gegensatz zu FilePath wird der Wert des LiteralPath-Parameters genau wie eingegeben verwendet. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einzelne Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.
Type: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SourcePathOrExtension
Dieser Parameter wird in der Syntaxauflistung angezeigt, da er in der Basisklasse definiert ist, die Set-AuthenticodeSignature
von abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht in Set-AuthenticodeSignature
implementiert.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-TimestampServer
Verwendet den angegebenen Zeitstempelserver, um der Signatur einen Zeitstempel hinzuzufügen. Geben Sie die URL des Zeitstempelservers als Zeichenfolge ein. Die URL muss mit https://
oder http://
beginnen.
Der Zeitstempel gibt die genaue Zeit an, zu der das Zertifikat der Datei hinzugefügt wurde. Ein Zeitstempel verhindert, dass das Skript fehlschlägt, wenn das Zertifikat abläuft, da Benutzer und Programme sicherstellen können, dass das Zertifikat beim Signieren gültig war.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können eine Zeichenfolge, die den Dateipfad enthält, an dieses Cmdlet weiterleiten.
Ausgaben
Dieses Cmdlet gibt ein Signature-Objekt zurück, das den festgelegten Wert darstellt.
Hinweise
Dieses Cmdlet ist nur auf Windows-Plattformen verfügbar.
Ähnliche Themen
Feedback
Feedback senden und anzeigen für