Freigeben über


Set-AuthenticodeSignature

Fügt einer 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

Das Set-AuthenticodeSignature Cmdlet fügt jeder Datei, die das Subject Interface Package (SIP) unterstützt, eine Authenticode-Signatur hinzu.

In einer PowerShell-Skriptdatei übernimmt 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
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

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, beschränkt die zertifikate, die mit der Codesignaturzertifizierungsstelle abgerufen wurden. Der Befehl speichert das Ergebnis in der $cert Variablen.

Der zweite Befehl definiert die $signingParameters Variable als HashTable mit den Parametern für das Set-AuthenticodeSignature Cmdlet, um das PSTestInternet2.ps1 Skript zu signieren. Er verwendet den FilePath-Parameter , um den Namen des Skripts anzugeben, den Zertifikatparameter , um anzugeben, dass das Zertifikat in der $cert Variablen gespeichert ist, und den HashAlgorithm-Parameter , um den Hashingalgorithmus auf SHA256 festzulegen.

Der dritte Befehl signiert das Skript, indem die in $signingParameters.

Hinweis

Die Verwendung des Parameters CodeSigningCert mit Get-ChildItem nur Zertifikaten, die über eine Codesignaturzertifizierungsstelle 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 es dann, um ein PowerShell-Skript zu signieren.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

Der erste Befehl verwendet das Get-PfxCertificate Cmdlet, um das C:\Test\MySign.pfx-Zertifikat in die $cert Variable zu laden.

Der zweite Befehl definiert die $signingParameters Variable als HashTable mit den Parametern für das Set-AuthenticodeSignature Cmdlet, um das ServerProps.ps1 Skript zu signieren. Er verwendet den FilePath-Parameter , um den Namen des Skripts anzugeben, den Zertifikatparameter , um anzugeben, dass das Zertifikat in der $cert Variablen gespeichert ist, und den HashAlgorithm-Parameter , um den Hashingalgorithmus auf SHA256 festzulegen.

Der dritte Befehl signiert das Skript, indem die in $signingParameters.

Wenn die Zertifikatdatei kennwort geschützt ist, fordert PowerShell Sie zur Eingabe des Kennworts auf.

Beispiel 3 : Hinzufügen einer Signatur, die die Stammzertifizierungsstelle 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.

$signingParameters = @{
    FilePath      = 'C:\scripts\Remodel.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
    IncludeChain  = 'All'
    TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters

Der erste Befehl definiert die $signingParameters Variable als HashTable mit den Parametern für das Set-AuthenticodeSignature Cmdlet, um das Skript zu signieren. Er verwendet den Parameter FilePath , um den Pfad zum Skript anzugeben, den Zertifikatparameter , um anzugeben, dass das Zertifikat in der $cert Variablen gespeichert ist, und den Parameter "HashAlgorithm ", um den Hashingalgorithmus auf SHA256 festzulegen. 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.

Der zweite Befehl signiert das Skript, indem die in $signingParameters.

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.

Um ein Zertifikat zu finden, verwenden oder verwenden Sie Get-PfxCertificate das Get-ChildItem Cmdlet auf dem Zertifikatlaufwerk Cert: . Wenn das Zertifikat ungültig ist oder keine Autorität besitzt code-signing , schlägt der Befehl fehl.

Typ:X509Certificate2
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Confirm

Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.

Typ:SwitchParameter
Aliase:cf
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Content

Dieser Parameter wird in der Syntaxauflistung angezeigt, da er in der Basisklasse definiert ist, Set-AuthenticodeSignature von der abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht implementiert.Set-AuthenticodeSignature

Typ:Byte[]
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-FilePath

Gibt den Pfad zu einer Datei an, die signiert wird.

Typ:String[]
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Force

Ermöglicht es dem Cmdlet, eine Signatur an eine schreibgeschützte Datei anzufügen. Selbst bei Verwendung des Parameters Force kann das Cmdlet keine Sicherheitseinschränkungen außer Kraft setzen.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-HashAlgorithm

Gibt den Hashalgorithmus an, den Windows verwendet, um die digitale Signatur für die Datei zu berechnen.

Die Standardeinstellung lautet 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 möglicher Werte finden Sie unter HashAlgorithmName Struct.

Typ:String
Position:Named
Standardwert:Null
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-IncludeChain

Bestimmt, welche Zertifikate in der Zertifikatvertrauenskette in der digitalen Signatur enthalten sind. NotRoot ist die Standardeinstellung.

Gültige Werte sind:

  • Signierer: Enthält nur das Zertifikat des Signierers.
  • NotRoot: Enthält alle Zertifikate in der Zertifikatkette, mit Ausnahme der Stammzertifizierungsstelle.
  • Alle: Enthält alle Zertifikate in der Zertifikatkette.
Typ:String
Position:Named
Standardwert:NotRoot
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LiteralPath

Gibt den Pfad zu einer Datei an, die signiert wird. Im Gegensatz zu FilePath wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Typ:String[]
Aliase:PSPath
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-SourcePathOrExtension

Dieser Parameter wird in der Syntaxauflistung angezeigt, da er in der Basisklasse definiert ist, Set-AuthenticodeSignature von der abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht implementiert.Set-AuthenticodeSignature

Typ:String[]
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-TimestampServer

Verwendet den angegebenen Zeitstempelserver, um der Signatur einen Zeitstempel hinzuzufügen. Geben Sie die URL des Zeitstempelservers als Zeichenfolge ein.

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.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Typ:SwitchParameter
Aliase:wi
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

String

Sie können eine Zeichenfolge weiterleiten, die den Dateipfad zu diesem Cmdlet enthält.

Ausgaben

Signature

Dieses Cmdlet gibt ein Signature -Objekt zurück, das den festgelegten Wert darstellt.