Set-AuthenticodeSignature
Fügt ein 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
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
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
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 definiert die $signingParameters
Variable als HashTable- mit den Parametern für das Cmdlet Set-AuthenticodeSignature
, um das PSTestInternet2.ps1
Skript zu signieren. Er verwendet den FilePath Parameter, um den Namen des Skripts anzugeben, den Certificate Parameter, um anzugeben, dass das Zertifikat in der $cert
Variablen gespeichert ist, und der HashAlgorithm-parameter, um den Hashingalgorithmus auf SHA256 festzulegen.
Der dritte Befehl signiert das Skript durch Splatting der in $signingParameters
definierten Parameter.
Anmerkung
Die Verwendung des CodeSigningCert-Parameters mit Get-ChildItem
gibt nur Zertifikate zurück, 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 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
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
Der erste Befehl verwendet das Cmdlet Get-PfxCertificate
, um das Zertifikat "C:\Test\MySign.pfx" in die variable $cert
zu laden.
Der zweite Befehl definiert die $signingParameters
Variable als HashTable- mit den Parametern für das Cmdlet Set-AuthenticodeSignature
, um das ServerProps.ps1
Skript zu signieren. Er verwendet den FilePath Parameter, um den Namen des Skripts anzugeben, den Certificate Parameter, um anzugeben, dass das Zertifikat in der $cert
Variablen gespeichert ist, und der HashAlgorithm-parameter, um den Hashingalgorithmus auf SHA256 festzulegen.
Der dritte Befehl signiert das Skript durch Splatting der in $signingParameters
definierten Parameter.
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.
$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 Cmdlet Set-AuthenticodeSignature
, um das Skript zu signieren. Es verwendet den FilePath Parameter, um den Pfad zum Skript anzugeben, den Certificate Parameter, um anzugeben, dass das Zertifikat in der $cert
Variablen gespeichert ist, und der HashAlgorithm Parameter, um den Hashingalgorithmus auf SHA256 festzulegen. 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.
Der zweite Befehl signiert das Skript, indem die in $signingParameters
definierten Parameter splatting.
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.
Typ: | X509Certificate2 |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
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, von der Set-AuthenticodeSignature
abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht in Set-AuthenticodeSignature
implementiert.
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 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 Hashingalgorithmus an, den Windows zum Berechnen der digitalen Signatur für die Datei verwendet.
Der Standardwert ist 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.
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 Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, schließen Sie ihn in einfache Anführungszeichen ein. 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, von der Set-AuthenticodeSignature
abgeleitet wird. Die Unterstützung für diesen Parameter wird jedoch nicht in Set-AuthenticodeSignature
implementiert.
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 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.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WhatIf
Zeigt, was passiert, 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
Sie können eine Zeichenfolge weiterleiten, die den Dateipfad zu diesem Cmdlet enthält.
Ausgaben
Dieses Cmdlet gibt ein Signature -Objekt zurück, das den festgelegten Wert darstellt.