Dela via


Set-AuthenticodeSignature

Lägger till en Authenticode-signatur i ett PowerShell-skript eller en annan fil.

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

Cmdleten Set-AuthenticodeSignature lägger till en Authenticode-signatur till alla filer som stöder Subject Interface Package (SIP).

I en PowerShell-skriptfil har signaturen formen av ett textblock som anger slutet på instruktionerna som körs i skriptet. Om det finns en signatur i filen när den här cmdleten körs tas signaturen bort.

Exempel

Exempel 1 – Signera ett skript med ett certifikat från det lokala certifikatarkivet

Dessa kommandon hämtar ett kodsigneringscertifikat från PowerShell-certifikatprovidern och använder det för att signera ett PowerShell-skript.

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

Det första kommandot använder cmdleten Get-ChildItem och PowerShell-certifikatprovidern för att hämta certifikaten i underkatalogen Cert:\CurrentUser\My för certifikatarkivet. Enheten Cert: är den enhet som exponeras av certifikatprovidern. Parametern CodeSigningCert , som endast stöds av certifikatprovidern, begränsar de certifikat som hämtas till dem med kodsigneringsutfärdare. Kommandot lagrar resultatet i variabeln $cert .

Det andra kommandot definierar variabeln som en HashTable med parametrarna för cmdleten Set-AuthenticodeSignature för att signera skriptetPSTestInternet2.ps1.$signingParameters Den använder Parametern FilePath för att ange namnet på skriptet, certifikatparametern för att ange att certifikatet lagras i variabeln $cert och parametern HashAlgorithm för att ange hash-algoritmen till SHA256.

Det tredje kommandot signerar skriptet genom att stänka parametrarna som definierats i $signingParameters.

Kommentar

Använda parametern CodeSigningCert med Get-ChildItem returnerar endast certifikat som har kodsigneringsutfärdare och som innehåller en privat nyckel. Om det inte finns någon privat nyckel kan certifikaten inte användas för signering.

Exempel 2 – Signera ett skript med ett certifikat från en PFX-fil

Dessa kommandon använder cmdleten Get-PfxCertificate för att läsa in ett kodsigneringscertifikat. Använd det sedan för att signera ett PowerShell-skript.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

Det första kommandot använder cmdleten Get-PfxCertificate för att läsa in certifikatet C:\Test\MySign.pfx i variabeln $cert .

Det andra kommandot definierar variabeln som en HashTable med parametrarna för cmdleten Set-AuthenticodeSignature för att signera skriptetServerProps.ps1.$signingParameters Den använder Parametern FilePath för att ange namnet på skriptet, certifikatparametern för att ange att certifikatet lagras i variabeln $cert och parametern HashAlgorithm för att ange hash-algoritmen till SHA256.

Det tredje kommandot signerar skriptet genom att stänka parametrarna som definierats i $signingParameters.

Om certifikatfilen är lösenordsskyddad uppmanar PowerShell dig att ange lösenordet.

Exempel 3 – Lägg till en signatur som innehåller rotutfärdare

Det här kommandot lägger till en digital signatur som innehåller rotutfärdare i förtroendekedjan och som signeras av en tidsstämpelserver från tredje part.

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

Det första kommandot definierar variabeln $signingParameters som en HashTable med parametrarna för cmdleten Set-AuthenticodeSignature för att signera skriptet. Den använder Parametern FilePath för att ange sökvägen till skriptet, certifikatparametern för att ange att certifikatet lagras i variabeln $cert och parametern HashAlgorithm för att ange hash-algoritmen till SHA256. Den använder parametern IncludeChain för att inkludera alla signaturer i förtroendekedjan, inklusive rotutfärdare. Den använder också parametern TimeStampServer för att lägga till en tidsstämpel i signaturen. Detta förhindrar att skriptet misslyckas när certifikatet upphör att gälla.

Det andra kommandot signerar skriptet genom att stänka parametrarna som definierats i $signingParameters.

Parametrar

-Certificate

Anger det certifikat som ska användas för att signera skriptet eller filen. Ange en variabel som lagrar ett objekt som representerar certifikatet eller ett uttryck som hämtar certifikatet.

Om du vill hitta ett certifikat använder Get-PfxCertificate eller använder du cmdleten Get-ChildItem på certifikatenheten Cert: . Om certifikatet inte är giltigt eller inte har code-signing någon behörighet misslyckas kommandot.

Typ:X509Certificate2
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

Typ:SwitchParameter
Alias:cf
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Content

Den här parametern visas i syntaxlistan eftersom den definieras i basklassen som Set-AuthenticodeSignature härleds från. Stöd för den här parametern implementeras dock inte i Set-AuthenticodeSignature.

Typ:Byte[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-FilePath

Anger sökvägen till en fil som signeras.

Typ:String[]
Position:1
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Force

Tillåter att cmdleten lägger till en signatur i en skrivskyddad fil. Även med hjälp av force-parametern kan cmdleten inte åsidosätta säkerhetsbegränsningar.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-HashAlgorithm

Anger hash-algoritmen som Windows använder för att beräkna den digitala signaturen för filen.

Standardvärdet är SHA1. Filer som är signerade med en annan hashalgoritm kanske inte identifieras i andra system. Vilka algoritmer som stöds beror på operativsystemets version.

En lista över möjliga värden finns i HashAlgorithmName Struct.

Typ:String
Position:Named
Standardvärde:Null
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-IncludeChain

Avgör vilka certifikat i certifikatförtroendekedjan som ingår i den digitala signaturen. NotRoot är standard.

Giltiga värden är:

  • Undertecknare: Innehåller endast undertecknarens certifikat.
  • NotRoot: Innehåller alla certifikat i certifikatkedjan, förutom rotutfärdare.
  • Alla: Innehåller alla certifikat i certifikatkedjan.
Typ:String
Position:Named
Standardvärde:NotRoot
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-LiteralPath

Anger sökvägen till en fil som signeras. Till skillnad från FilePath används värdet för parametern LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den med enkla citattecken. Enkla citattecken gör att PowerShell inte tolkar några tecken som escape-sekvenser.

Typ:String[]
Alias:PSPath
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-SourcePathOrExtension

Den här parametern visas i syntaxlistan eftersom den definieras i basklassen som Set-AuthenticodeSignature härleds från. Stöd för den här parametern implementeras dock inte i Set-AuthenticodeSignature.

Typ:String[]
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-TimestampServer

Använder den angivna tidsstämpelservern för att lägga till en tidsstämpel i signaturen. Ange URL:en för tidsstämpelservern som en sträng.

Tidsstämpeln representerar den exakta tid då certifikatet lades till i filen. En tidsstämpel förhindrar att skriptet misslyckas om certifikatet upphör att gälla eftersom användare och program kan kontrollera att certifikatet var giltigt vid tidpunkten för signeringen.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-WhatIf

Visar vad som skulle hända om cmdleten kördes. Cmdleten körs inte.

Typ:SwitchParameter
Alias:wi
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

String

Du kan skicka en sträng som innehåller filsökvägen till den här cmdleten.

Utdata

Signature

Den här cmdleten returnerar ett signaturobjekt som representerar det värde som anges.