Set-AuthenticodeSignature

Hiermee voegt u een Authenticode-handtekening toe aan een PowerShell-script of een ander bestand.

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

Description

Deze cmdlet is alleen beschikbaar op het Windows-platform.

De Set-AuthenticodeSignature cmdlet voegt een Authenticode-handtekening toe aan elk bestand dat ondersteuning biedt voor Subject Interface Package (SIP).

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 een certificaat uit het lokale certificaatarchief

Met deze opdrachten wordt een certificaat voor ondertekening van code opgehaald bij de PowerShell-certificaatprovider en wordt dit gebruikt 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 wordt weergegeven door de certificaatprovider. De parameter CodeSigningCert , die alleen wordt ondersteund door de certificaatprovider, beperkt de certificaten die worden opgehaald tot certificaten met een instantie voor ondertekening van code. 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. De parameter FilePath wordt gebruikt om de naam van het script op te geven en de certificaatparameter om op te geven dat het certificaat wordt opgeslagen in de $cert variabele.

Notitie

Als u de parameter CodeSigningCert gebruikt met Get-ChildItem , worden alleen certificaten geretourneerd die een machtiging voor ondertekening van code 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 code-ondertekening te laden. Gebruik het 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 certificaat C:\Test\MySign.pfx 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 op naar het scriptbestand dat wordt ondertekend en de parameter Cert geeft de $cert variabele met het certificaat door aan Set-AuthenticodeSignature.

Als het certificaatbestand met een wachtwoord is beveiligd, vraagt PowerShell u om het wachtwoord.

Voorbeeld 3: een handtekening toevoegen die de basisinstantie 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 gebruikt de FilePath parameter om het script op te geven dat wordt ondertekend en de certificaatparameter om het certificaat op te geven dat wordt opgeslagen in de $cert variabele. De parameter IncludeChain wordt 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 waarin een object wordt opgeslagen dat het certificaat vertegenwoordigt of een expressie waarmee het certificaat wordt opgehaald.

Gebruik of gebruik de cmdlet in het Get-ChildItem certificaatstation Cert: om een certificaat Get-PfxCertificate te vinden. Als het certificaat niet geldig is of geen machtiging heeft code-signing , mislukt de opdracht.

Type:X509Certificate2
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Hiermee wordt u gevraagd om bevestiging voordat u de cmdlet uitvoert.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Content

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

Type:Byte[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-FilePath

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

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 de beveiligingsbeperkingen niet negeren.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HashAlgorithm

Hiermee geeft u het hash-algoritme op dat Windows gebruikt om de digitale handtekening voor het bestand te berekenen.

Voor PowerShell 7.3 is de standaardwaarde SHA256, het standaardhashalgoritme van Windows. Voor eerdere versies is de standaardwaarde SHA1. Bestanden die zijn ondertekend met een ander hash-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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeChain

Bepaalt welke certificaten in de certificaatvertrouwensketen worden 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
Required:False
Accept pipeline input:False
Accept wildcard characters: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 escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens vertellen PowerShell dat geen tekens als escape-reeksen worden geïnterpreteerd.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SourcePathOrExtension

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

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 aan het bestand is toegevoegd. 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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Hiermee wordt weergegeven wat er zou gebeuren als u de cmdlet uitvoert. De cmdlet wordt niet uitgevoerd.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

String

U kunt een tekenreeks met het bestandspad doorsnijden naar deze cmdlet.

Uitvoerwaarden

Signature

Deze cmdlet retourneert een handtekeningobject dat de waarde vertegenwoordigt die wordt ingesteld.

Notities

Deze cmdlet is alleen beschikbaar op Windows-platforms.