Set-AuthenticodeSignature

Fügt eine Authenticode-Signatur zu einem PowerShell-Skript oder einer anderen Datei 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 eine Authenticode-Signatur zu jeder Datei hinzu, die Subject Interface Package (SIP) unterstützt.

In einer PowerShell-Skriptdatei verwendet die Signatur eine 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

Diese Befehle rufen ein Codesignaturzertifikat vom PowerShell-Zertifikatanbieter ab und verwenden sie zum Signieren eines PowerShell-Skripts.

$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, beschränkt die zertifikate, die auf diese mit Codesignaturbehörde abgerufen wurden. Der Befehl speichert das Ergebnis in der $cert Variable.

Der zweite Befehl verwendet das Cmdlet, um das Set-AuthenticodeSignaturePSTestInternet2.ps1 Skript zu signieren. Es verwendet den FilePath-Parameter , um den Namen des Skripts und den Zertifikatparameter anzugeben, um anzugeben, dass das Zertifikat in der $cert Variable gespeichert wird.

Hinweis

Wenn Sie den CodeSigningCert-ParameterGet-ChildItem mit nur Zertifikaten verwenden, die über eine Codesignaturbehörde verfügen und einen privaten Schlüssel enthalten. Wenn kein privater Schlüssel vorhanden ist, können die Zertifikate nicht für die Signatur 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
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

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

Der zweite Befehl verwendet Set-AuthenticodeSignature zum Signieren des Skripts. Der Parameter "FilePathSet-AuthenticodeSignature" gibt den Pfad zur signierten Skriptdatei an, und der Cert-Parameter übergibt die $cert Variable, die das Zertifikat Set-AuthenticodeSignatureenthält.

Wenn die Zertifikatdatei kennwortgeschützter ist, fordert PowerShell Sie zum Kennwort auf.

Beispiel 3 : Hinzufügen einer Signatur, die die Stammbehörde 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 "http://timestamp.fabrikam.com/scripts/timstamper.dll"

Der Befehl verwendet den FilePath-Parameter , um das signierte Skript und den Zertifikatparameter anzugeben, um das Zertifikat anzugeben, das in der $cert Variablen gespeichert wird. Es verwendet den IncludeChain-Parameter , um alle Signaturen in die Vertrauenskette einzuschließen, einschließlich der Stammbehörde. 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.

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

Type:X509Certificate2
Position:1
Default value:None
Required:True
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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Content

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

Type:Byte[]
Position:Named
Default value:None
Required:True
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
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

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

Type:SwitchParameter
Position:Named
Default value:False
Required: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 3.0 ist die Standardeinstellung SHA256, was der Windows-Standard-Hashing-Algorithmus ist. Für PowerShell 2.0 ist die Standardeinstellung 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.

Type:String
Position:Named
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters: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, außer für die Stammbehörde.
  • Alle: Enthält alle Zertifikate in der Zertifikatkette.
Type:String
Position:Named
Default value:NotRoot
Required:False
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 darauf hin, keine Zeichen als Escapesequenzen zu interpretieren.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SourcePathOrExtension

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

Type:String[]
Position:Named
Default value:None
Required:True
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.

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
Required:False
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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

String

Sie können eine Zeichenfolge ausführen, die den Dateipfad enthält Set-AuthenticodeSignature.

Ausgaben

Signature

Hinweise

Dieses Cmdlet ist nur auf Windows-Plattformen verfügbar.