Set-AuthenticodeSignature
Fügt einer PowerShell-Skript oder einer anderen Datei eine Authenticode-Signatur 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>]
ByContent
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-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 ü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 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 verwendet das Set-AuthenticodeSignature Cmdlet, um das PSTestInternet2.ps1 Skript zu signieren. Er verwendet den FilePath-Parameter , um den Namen des Skripts und den Zertifikatparameter anzugeben, um anzugeben, dass das Zertifikat in der $cert Variablen gespeichert ist.
Note
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
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert
Der erste Befehl verwendet das Get-PfxCertificate Cmdlet, um das C:\Test\MySign.pfx Zertifikat in die $cert Variable zu laden.
Der zweite Befehl wird zum Signieren des Skripts verwendet Set-AuthenticodeSignature . Der Parameter FilePath von Set-AuthenticodeSignature specifies the path to the script file being signed and the Cert parameter pass the $cert variable containing the certificate to 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
Mit diesem Befehl wird eine digitale Signatur hinzugefügt, 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 Befehl verwendet den FilePath-Parameter , um das signierte Skript und den Zertifikatparameter 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 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 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.
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: | Cf |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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
Parametereigenschaften
| Typ: | Byte[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
ByContent
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| 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, der Windows zum Berechnen der digitalen Signatur für die Datei verwendet.
Für PowerShell 7.3 ist DER Standardwert SHA256, der der Windows Standardhashingalgorithmus ist. Bei früheren Versionen ist SHA1 der Standardwert. 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 möglicher Werte finden Sie unter HashAlgorithmName-Struktur .
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:
-
Signer: Enthält nur das Zertifikat des Signierers. -
NotRoot: Enthält alle Zertifikate in der Zertifikatkette, mit Ausnahme der Stammzertifizierungsstelle. -
All: Schließt alle Zertifikate in der Zertifikatkette ein.
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, EP |
Parametersätze
ByLiteralPath
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | True |
| Wert aus verbleibenden Argumenten: | 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
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
ByContent
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | True |
| 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. Die URL muss beginnen mit http://.
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.
Note
PowerShell 7.3 hat unterstützung für https:// URLs mit diesem Parameter hinzugefügt. Die zugrunde liegende API unterstützt jedoch kein HTTPS. Wenn Sie HTTPS verwenden, gibt der Befehl einen Fehler zurück, die Datei ist jedoch ohne Zeitstempel signiert. Weitere Informationen finden Sie unter Problem Nr. 25130.
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 weiterleiten, die den Dateipfad zu diesem Cmdlet enthält.
Ausgaben
Signature
Dieses Cmdlet gibt ein Signature -Objekt zurück, das den festgelegten Wert darstellt.
Hinweise
Dieses Cmdlet ist nur auf Windows-Plattformen verfügbar.