Delen via


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

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 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
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

De eerste opdracht maakt gebruik van de Get-ChildItem cmdlet en de PowerShell-certificaatprovider om de certificaten op te halen in de submap van het certificaatarchief Cert:\CurrentUser\My. 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 definieert de $signingParameters variabele als een HashTable- met de parameters voor de Set-AuthenticodeSignature-cmdlet om het PSTestInternet2.ps1 script te ondertekenen. Hierbij wordt de parameter FilePath gebruikt om de naam van het script, de parameter Certificate op te geven om op te geven dat het certificaat is opgeslagen in de $cert variabele en de parameter HashAlgorithm om het hash-algoritme in te stellen op SHA256.

De derde opdracht ondertekent het script door de parameters te splatten die zijn gedefinieerd in $signingParameters.

Notitie

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
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

De eerste opdracht gebruikt de Get-PfxCertificate cmdlet om het C:\Test\MySign.pfx-certificaat in de $cert variabele te laden.

De tweede opdracht definieert de $signingParameters variabele als een HashTable- met de parameters voor de Set-AuthenticodeSignature-cmdlet om het ServerProps.ps1 script te ondertekenen. Hierbij wordt de parameter FilePath gebruikt om de naam van het script, de parameter Certificate op te geven om op te geven dat het certificaat is opgeslagen in de $cert variabele en de parameter HashAlgorithm om het hash-algoritme in te stellen op SHA256.

De derde opdracht ondertekent het script door de parameters te splatten die zijn gedefinieerd in $signingParameters.

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.

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

De eerste opdracht definieert de $signingParameters variabele als een HashTable- met de parameters voor de Set-AuthenticodeSignature-cmdlet om het script te ondertekenen. Hierbij wordt de parameter FilePath gebruikt om het pad naar het script op te geven, de parameter Certificate om op te geven dat het certificaat is opgeslagen in de $cert variabele en de parameter HashAlgorithm om het hash-algoritme in te stellen op SHA256. 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.

De tweede opdracht ondertekent het script door de parameters te splatten die zijn gedefinieerd in $signingParameters.

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 u Get-PfxCertificate of gebruikt u de cmdlet Get-ChildItem in het station Certificaat Cert:. Als het certificaat ongeldig is of geen code-signing-instantie heeft, mislukt de opdracht.

Type:X509Certificate2
Position:1
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Confirm

U wordt 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 waaruit Set-AuthenticodeSignature is afgeleid. 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.

De standaardwaarde is 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 Structvoor een lijst met mogelijke waarden.

Type:String
Position:Named
Default value:Null
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 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 geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.

Type:String[]
Aliassen:PSPath
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 waaruit Set-AuthenticodeSignature is afgeleid. 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.

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

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

Type:SwitchParameter
Aliassen:wi
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

String

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

Uitvoerwaarden

Signature

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