Delen via


Set-AuthenticodeSignature

Voegt een Authenticode-handtekening toe aan een PowerShell-script of een ander bestand.

Syntaxis

ByPath (Standaard)

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>]

Description

Deze cmdlet is alleen beschikbaar op het Windows-platform.

De cmdlet Set-AuthenticodeSignature 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 haalt u een certificaat voor ondertekening van programmacode op bij de PowerShell-certificaatprovider en gebruikt u dit 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 submap Cert:\CurrentUser\My van het certificaatarchief. Het Cert: station is het station dat door de certificaatprovider wordt weergegeven. De parameter CodeSigningCert, die alleen wordt ondersteund door de certificaatprovider, beperkt de certificaten die zijn opgehaald aan certificaten met een instantie voor ondertekening van programmacode. Met de opdracht wordt het resultaat opgeslagen in de $cert variabele.

De tweede opdracht maakt gebruik van de Set-AuthenticodeSignature cmdlet om het PSTestInternet2.ps1 script te ondertekenen. Hierbij wordt de parameter FilePath gebruikt om de naam van het script en de parameter Certificate op te geven om op te geven dat het certificaat is opgeslagen in de variabele $cert.

Opmerking

Met behulp van de parameter CodeSigningCert met Get-ChildItem worden 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 code 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 parameter FilePath van Set-AuthenticodeSignature geeft het pad op 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 rootbevoegdheid bevat

Met deze opdracht wordt een digitale handtekening toegevoegd die de hoofdinstantie in de vertrouwensketen bevat en die is ondertekend door een tijdstempelserver van derden.

$signingParameters = @{
    FilePath      = 'C:\scripts\Remodel.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
    IncludeChain  = 'All'
    TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters

De opdracht gebruikt de parameter FilePath om het script op te geven dat wordt ondertekend en de parameter Certificate 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, gebruik Get-PfxCertificate of de cmdlet Get-ChildItem in de Certificaat-schijf Cert:. Als het certificaat niet geldig is of geen code-signing instantie heeft, mislukt de opdracht.

Parametereigenschappen

Type:X509Certificate2
Default value:None
Ondersteunt jokertekens:False
DontShow:False

Parametersets

(All)
Position:1
Verplicht:True
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

-Confirm

Voordat u de cmdlet uitvoert, vraagt het systeem om bevestiging.

Parametereigenschappen

Type:SwitchParameter
Default value:False
Ondersteunt jokertekens:False
DontShow:False
Aliassen:Cf

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

-Content

Deze parameter wordt weergegeven in de syntaxisvermelding omdat deze is gedefinieerd in de basisklasse waaruit Set-AuthenticodeSignature is afgeleid. Ondersteuning voor deze parameter wordt echter niet geïmplementeerd in Set-AuthenticodeSignature.

Parametereigenschappen

Type:

Byte[]

Default value:None
Ondersteunt jokertekens:False
DontShow:False

Parametersets

ByContent
Position:Named
Verplicht:True
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:True
Waarde van resterende argumenten:False

-FilePath

Hiermee geeft u het pad naar een bestand dat wordt ondertekend.

Parametereigenschappen

Type:

String[]

Default value:None
Ondersteunt jokertekens:False
DontShow:False

Parametersets

ByPath
Position:1
Verplicht:True
Waarde uit pijplijn:True
Waarde uit pijplijn op eigenschapsnaam:True
Waarde van resterende argumenten:False

-Force

Hiermee kan de cmdlet een handtekening toevoegen aan een alleen-lezen-bestand. Zelfs met behulp van de Force parameter kan de cmdlet geen beveiligingsbeperkingen overschrijven.

Parametereigenschappen

Type:SwitchParameter
Default value:False
Ondersteunt jokertekens:False
DontShow:False

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten: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.

Parametereigenschappen

Type:String
Default value:SHA256
Ondersteunt jokertekens:False
DontShow:False

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

-IncludeChain

Bepaalt welke certificaten in de certificaatvertrouwensketen zijn opgenomen in de digitale handtekening. NotRoot- is de standaardinstelling.

Geldige waarden zijn:

  • Signer: bevat alleen het certificaat van de ondertekenaar.
  • NotRoot: bevat alle certificaten in de certificaatketen, met uitzondering van de basisinstantie.
  • All: bevat alle certificaten in de certificaatketen.

Parametereigenschappen

Type:String
Default value:NotRoot
Ondersteunt jokertekens:False
DontShow:False

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

-LiteralPath

Hiermee geeft u het pad naar een bestand dat wordt ondertekend. In tegenstelling tot FilePath, wordt de waarde van de parameter LiteralPath exact gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escape-tekens bevat, zet het dan tussen enkele aanhalingstekens. Enkele aanhalingstekens zorgen ervoor dat PowerShell geen tekens als escapesequenties interpreteert.

Parametereigenschappen

Type:

String[]

Default value:None
Ondersteunt jokertekens:False
DontShow:False
Aliassen:PSPath, LP

Parametersets

ByLiteralPath
Position:Named
Verplicht:True
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:True
Waarde van resterende argumenten:False

-SourcePathOrExtension

Deze parameter wordt weergegeven in de syntaxisvermelding omdat deze is gedefinieerd in de basisklasse waaruit Set-AuthenticodeSignature is afgeleid. Ondersteuning voor deze parameter wordt echter niet geïmplementeerd in Set-AuthenticodeSignature.

Parametereigenschappen

Type:

String[]

Default value:None
Ondersteunt jokertekens:False
DontShow:False

Parametersets

ByContent
Position:Named
Verplicht:True
Waarde uit pijplijn:True
Waarde uit pijplijn op eigenschapsnaam:True
Waarde van resterende argumenten: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 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.

Opmerking

PowerShell 7.3 heeft ondersteuning toegevoegd voor https:// URL's met deze parameter. De onderliggende API biedt echter geen ondersteuning voor HTTPS. Als u HTTPS gebruikt, retourneert de opdracht een fout, maar het bestand is ondertekend zonder een tijdstempel. Zie probleem #25130voor meer informatie.

Parametereigenschappen

Type:String
Default value:None
Ondersteunt jokertekens:False
DontShow:False

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

-WhatIf

Toont wat er zou gebeuren wanneer de cmdlet wordt uitgevoerd. De cmdlet wordt niet uitgevoerd.

Parametereigenschappen

Type:SwitchParameter
Default value:False
Ondersteunt jokertekens:False
DontShow:False
Aliassen:Wi

Parametersets

(All)
Position:Named
Verplicht:False
Waarde uit pijplijn:False
Waarde uit pijplijn op eigenschapsnaam:False
Waarde van resterende argumenten:False

CommonParameters

Deze cmdlet ondersteunt de algemene parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction en -WarningVariable. Zie about_CommonParametersvoor meer informatie.

Invoerwaarden

String

U kunt een tekenreeks dat het bestandspad bevat naar deze cmdlet doorgeven.

Uitvoerwaarden

Signature

Deze cmdlet retourneert een Signature object dat de waarde vertegenwoordigt die is ingesteld.

Notities

Deze cmdlet is alleen beschikbaar op Windows-platforms.