Freigeben über


Set-AuthenticodeSignature

Fügt ein Authenticode- Signatur zu einem PowerShell-Skript oder einer anderen Datei hinzu.

Syntax

ByPath (Standard)

Set-AuthenticodeSignature
    [-Certificate] <X509Certificate2>
    [-FilePath] <String[]>
    [-IncludeChain <String>]
    [-TimestampServer <String>]
    [-HashAlgorithm <String>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ByLiteralPath

Set-AuthenticodeSignature
    [-Certificate] <X509Certificate2>
    -LiteralPath <String[]>
    [-IncludeChain <String>]
    [-TimestampServer <String>]
    [-HashAlgorithm <String>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Beschreibung

Das Cmdlet Set-AuthenticodeSignature 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 diese 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 Cmdlet Get-ChildItem und den PowerShell-Zertifikatanbieter, um die Zertifikate im Unterverzeichnis Cert:\CurrentUser\My des Zertifikatspeichers abzurufen. Das Cert: Laufwerk ist das Laufwerk, das vom Zertifikatanbieter verfügbar gemacht wird. Der parameter CodeSigningCert, 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 verwendet das Set-AuthenticodeSignature Cmdlet, um das PSTestInternet2.ps1 Skript zu signieren. Er verwendet den FilePath-Parameter , um den Namen des Skripts anzugeben, und den Certificate-Parameter, um anzugeben, dass das Zertifikat in der $cert Variablen gespeichert wird.

Beispiel 2 : Signieren eines Skripts mithilfe eines Zertifikats aus einer PFX-Datei

Diese Befehle verwenden das Cmdlet Get-PfxCertificate zum Laden eines Codesignaturzertifikats. 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 Get-PfxCertificate, um das Zertifikat "C:\Test\MySign.pfx" in die variable $cert zu laden.

Der zweite Befehl wird verwendet, um das Skript zu signieren Set-AuthenticodeSignature . Der FilePath-Parameter von Set-AuthenticodeSignature gibt den Pfad zur Skriptdatei an, die signiert wird, und der Cert-Parameter übergibt die Variable, die $cert das Zertifikat enthält, an Set-AuthenticodeSignature.

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 von einem Zeitstempelserver eines Drittanbieters signiert wird.

Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll"

Der Befehl verwendet den Parameter FilePath , um das zu signierende Skript anzugeben, und den Parameter Certificate , um das Zertifikat anzugeben, das in der $cert Variablen gespeichert wird. Es verwendet den parameter IncludeChain, um alle Signaturen in die Vertrauenskette einzuschließen, einschließlich der Stammzertifizierungsstelle. Außerdem wird der TimeStampServer Parameter verwendet, um der Signatur einen Zeitstempel hinzuzufügen. Dadurch wird verhindert, dass das Skript fehlschlägt, wenn das Zertifikat abläuft.

Parameter

-Certificate

Gibt das Zertifikat an, das zum Signieren des Skripts oder der Datei verwendet wird. Geben Sie eine Variable ein, die ein Objekt speichert, das das Zertifikat darstellt, oder einen Ausdruck, der das Zertifikat abruft.

Um ein Zertifikat zu finden, verwenden Sie Get-PfxCertificate oder verwenden Sie das Cmdlet Get-ChildItem auf dem Laufwerk "Certificate Cert:". Wenn das Zertifikat ungültig ist oder nicht über code-signing Autorität verfügt, schlägt der Befehl fehl.

Parametereigenschaften

Typ:X509Certificate2
Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:1
Obligatorisch:True
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-Confirm

Fordert Sie zur Bestätigung auf, bevor Sie das Cmdlet ausführen.

Parametereigenschaften

Typ:SwitchParameter
Standardwert:False
Unterstützt Platzhalter:False
Nicht anzeigen:False
Aliase:vgl

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-FilePath

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

Parametereigenschaften

Typ:

String[]

Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

ByPath
Position:1
Obligatorisch:True
Wert aus Pipeline:True
Wert aus Pipeline nach dem Eigenschaftsnamen:True
Wert aus verbleibenden Argumenten:False

-Force

Ermöglicht 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.

Parametereigenschaften

Typ:SwitchParameter
Standardwert:False
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-HashAlgorithm

Gibt den Hashingalgorithmus an, den Windows zum Berechnen der digitalen Signatur für die Datei verwendet.

Für PowerShell 3.0 ist der Standardwert SHA256, der standardmäßige Hashingalgorithmus von Windows. Für PowerShell 2.0 ist der Standardwert SHA1. Dateien, die mit einem anderen Hashingalgorithmus signiert sind, werden möglicherweise auf anderen Systemen 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.

Parametereigenschaften

Typ:String
Standardwert:SHA256
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten: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.

Parametereigenschaften

Typ:String
Standardwert:NotRoot
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten: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 Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen signalisieren PowerShell, dass keine Zeichen als Escapesequenzen interpretiert werden sollen.

Parametereigenschaften

Typ:

String[]

Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False
Aliase:PSPath

Parametersätze

ByLiteralPath
Position:Named
Obligatorisch:True
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:True
Wert aus verbleibenden Argumenten:False

-TimestampServer

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

Der Zeitstempel stellt die genaue Uhrzeit dar, 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 überprüfen können, ob das Zertifikat zum Zeitpunkt der Signierung gültig war.

Parametereigenschaften

Typ:String
Standardwert:None
Unterstützt Platzhalter:False
Nicht anzeigen:False

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

-WhatIf

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

Parametereigenschaften

Typ:SwitchParameter
Standardwert:False
Unterstützt Platzhalter:False
Nicht anzeigen:False
Aliase:Wi

Parametersätze

(All)
Position:Named
Obligatorisch:False
Wert aus Pipeline:False
Wert aus Pipeline nach dem Eigenschaftsnamen:False
Wert aus verbleibenden Argumenten:False

CommonParameters

Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.

Eingaben

String

Sie können eine Zeichenfolge, die den Dateipfad enthält, über die Pipeline an Set-AuthenticodeSignature.

Ausgaben

Signature