Set-AuthenticodeSignature
Voegt een Authenticode-handtekening toe aan een PowerShell-script of een ander bestand.
Syntaxis
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>]
Description
Deze cmdlet is alleen beschikbaar op het Windows-platform.
De Set-AuthenticodeSignature
cmdlet voegt een Authenticode-handtekening toe aan elk bestand dat SIP (Subject Interface Package) ondersteunt.
In een PowerShell-scriptbestand heeft de handtekening de vorm van een tekstblok dat het einde aangeeft van de instructies die in het script worden uitgevoerd. Als er een handtekening in het bestand staat wanneer deze cmdlet wordt uitgevoerd, wordt die handtekening verwijderd.
Voorbeelden
Voorbeeld 1: Een script ondertekenen met behulp van een certificaat uit het lokale certificaatarchief
Met deze opdrachten wordt een certificaat voor ondertekening van programmacode opgehaald van de PowerShell-certificaatprovider en gebruikt u het om een PowerShell-script te ondertekenen.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
De eerste opdracht maakt gebruik van de Get-ChildItem
cmdlet en de PowerShell-certificaatprovider om de certificaten op te halen in de Cert:\CurrentUser\My
submap van het certificaatarchief. Het Cert:
station is het station dat door de certificaatprovider wordt weergegeven. De codeSigningCert-parameter , die alleen wordt ondersteund door de certificaatprovider, beperkt de certificaten die worden opgehaald aan certificaten die zijn opgehaald met een instantie voor ondertekening van programmacode. Met de opdracht wordt het resultaat opgeslagen in de $cert
variabele.
De tweede opdracht gebruikt de Set-AuthenticodeSignature
cmdlet om het PSTestInternet2.ps1
script te ondertekenen. Hierbij wordt de FilePath-parameter gebruikt om de naam van het script en de certificaatparameter op te geven om op te geven dat het certificaat is opgeslagen in de $cert
variabele.
Notitie
Met de parameter CodeSigningCert worden Get-ChildItem
alleen certificaten geretourneerd die een instantie voor ondertekening van programmacode hebben en een persoonlijke sleutel bevatten. Als er geen persoonlijke sleutel is, kunnen de certificaten niet worden gebruikt voor ondertekening.
Voorbeeld 2: Een script ondertekenen met behulp van een certificaat uit een PFX-bestand
Deze opdrachten gebruiken de Get-PfxCertificate
cmdlet om een certificaat voor ondertekening van programmacode te laden. Gebruik dit vervolgens om een PowerShell-script te ondertekenen.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert
De eerste opdracht gebruikt de Get-PfxCertificate
cmdlet om het C:\Test\MySign.pfx-certificaat in de $cert
variabele te laden.
De tweede opdracht gebruikt Set-AuthenticodeSignature
om het script te ondertekenen. De FilePath-parameter van Set-AuthenticodeSignature
geeft het pad naar het scriptbestand dat wordt ondertekend en de parameter Certificaat geeft de $cert
variabele met het certificaat door aan Set-AuthenticodeSignature
.
Als het certificaatbestand met een wachtwoord is beveiligd, wordt u door PowerShell gevraagd om het wachtwoord.
Voorbeeld 3: Een handtekening toevoegen die de hoofdinstantie bevat
Met deze opdracht wordt een digitale handtekening toegevoegd die de basisinstantie in de vertrouwensketen bevat en die is ondertekend door een tijdstempelserver van derden.
Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"
De opdracht maakt gebruik van de FilePath-parameter om het script op te geven dat wordt ondertekend en de certificaatparameter om het certificaat op te geven dat is opgeslagen in de $cert
variabele. Hierbij wordt de parameter IncludeChain gebruikt om alle handtekeningen in de vertrouwensketen op te nemen, inclusief de basisinstantie. Ook wordt de parameter TimeStampServer gebruikt om een tijdstempel toe te voegen aan de handtekening.
Dit voorkomt dat het script mislukt wanneer het certificaat verloopt.
Parameters
-Certificate
Hiermee geeft u het certificaat op dat wordt gebruikt om het script of bestand te ondertekenen. Voer een variabele in waarmee een object wordt opgeslagen dat het certificaat vertegenwoordigt of een expressie waarmee het certificaat wordt opgehaald.
Als u een certificaat wilt zoeken, gebruikt Get-PfxCertificate
of gebruikt u de Get-ChildItem
cmdlet in het certificaatstation Cert:
. Als het certificaat ongeldig is of geen instantie heeft code-signing
, mislukt de opdracht.
Type: | X509Certificate2 |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Confirm
Hiermee wordt u gevraagd om bevestiging voordat u de cmdlet uitvoert.
Type: | SwitchParameter |
Aliassen: | cf |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Content
Deze parameter wordt weergegeven in de syntaxisvermelding omdat deze is gedefinieerd in de basisklasse die Set-AuthenticodeSignature
is afgeleid van. Ondersteuning voor deze parameter wordt echter niet geïmplementeerd in Set-AuthenticodeSignature
.
Type: | Byte[] |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-FilePath
Hiermee geeft u het pad naar een bestand dat wordt ondertekend.
Type: | String[] |
Position: | 1 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Force
Hiermee kan de cmdlet een handtekening toevoegen aan een bestand met het kenmerk Alleen-lezen. Zelfs als u de parameter Force gebruikt, kan de cmdlet geen beveiligingsbeperkingen overschrijven.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-HashAlgorithm
Hiermee geeft u het hash-algoritme op dat door Windows wordt gebruikt om de digitale handtekening voor het bestand te berekenen.
Voor PowerShell 7.3 is de standaardwaarde SHA256. Dit is het standaard-hashingalgoritme van Windows. Voor eerdere versies is de standaardWAARDE SHA1. Bestanden die zijn ondertekend met een ander hashing-algoritme, worden mogelijk niet herkend op andere systemen. Welke algoritmen worden ondersteund, is afhankelijk van de versie van het besturingssysteem.
Zie HashAlgorithmName Struct voor een lijst met mogelijke waarden.
Type: | String |
Position: | Named |
Default value: | SHA256 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-IncludeChain
Bepaalt welke certificaten in de certificaatvertrouwensketen zijn opgenomen in de digitale handtekening. NotRoot is de standaardinstelling.
Geldige waarden zijn:
- Ondertekenaar: bevat alleen het certificaat van de ondertekenaar.
- NotRoot: bevat alle certificaten in de certificaatketen, met uitzondering van de basisinstantie.
- Alle: bevat alle certificaten in de certificaatketen.
Type: | String |
Position: | Named |
Default value: | NotRoot |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-LiteralPath
Hiermee geeft u het pad naar een bestand dat wordt ondertekend. In tegenstelling tot FilePath wordt de waarde van de Parameter LiteralPath precies gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.
Type: | String[] |
Aliassen: | PSPath, LP |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-SourcePathOrExtension
Deze parameter wordt weergegeven in de syntaxisvermelding omdat deze is gedefinieerd in de basisklasse die Set-AuthenticodeSignature
is afgeleid van. Ondersteuning voor deze parameter wordt echter niet geïmplementeerd in Set-AuthenticodeSignature
.
Type: | String[] |
Position: | Named |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-TimestampServer
Gebruikt de opgegeven tijdstempelserver om een tijdstempel toe te voegen aan de handtekening. Typ de URL van de tijdstempelserver als een tekenreeks. De URL moet beginnen met https://
of http://
.
Het tijdstempel geeft de exacte tijd aan waarop het certificaat is toegevoegd aan het bestand. Een tijdstempel voorkomt dat het script mislukt als het certificaat verloopt omdat gebruikers en programma's kunnen controleren of het certificaat geldig was op het moment van ondertekening.
Type: | String |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-WhatIf
Hiermee wordt weergegeven wat er zou gebeuren als u de cmdlet uitvoert. De cmdlet wordt niet uitgevoerd.
Type: | SwitchParameter |
Aliassen: | wi |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt een tekenreeks met het bestandspad naar deze cmdlet doorsluisen.
Uitvoerwaarden
Met deze cmdlet wordt een handtekeningobject geretourneerd dat de waarde vertegenwoordigt die is ingesteld.
Notities
Deze cmdlet is alleen beschikbaar op Windows-platforms.