Dela via


Set-AuthenticodeSignature

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

Syntax

ByPath (Standard)

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

Den här cmdleten är endast tillgänglig på Windows-plattformen.

Cmdleten Set-AuthenticodeSignature lägger till en Authenticode-signatur till alla filer som stöder Ämnesgränssnittspaket (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
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert

Det första kommandot använder cmdleten Get-ChildItem och PowerShell-certifikatprovidern för att hämta certifikaten i Cert:\CurrentUser\My underkatalog för certifikatarkivet. Den Cert: enheten ä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 använder cmdleten Set-AuthenticodeSignature för att signera skriptet PSTestInternet2.ps1. Den använder parametern FilePath för att ange namnet på skriptet och parametern Certificate för att ange att certifikatet lagras i variabeln $cert.

Anmärkning

Med parametern CodeSigningCert med Get-ChildItem returneras 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
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

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

Det andra kommandot använder Set-AuthenticodeSignature för att signera skriptet. Parametern FilePath för Set-AuthenticodeSignature anger sökvägen till skriptfilen som signeras och parametern Cert skickar $cert-variabeln som innehåller certifikatet till Set-AuthenticodeSignature.

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

Kommandot använder parametern FilePath för att ange skriptet som signeras och parametern Certificate för att ange det certifikat som sparas i variabeln $cert. Det använder parametern IncludeChain för att inkludera alla signaturer i förtroendekedjan, inklusive rotemyndigheten. 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.

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 du Get-PfxCertificate eller använder cmdleten Get-ChildItem på enheten Certifikat Cert:. Om certifikatet inte är giltigt eller inte har code-signing utfärdare misslyckas kommandot.

Parameteregenskaper

Typ:X509Certificate2
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:1
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Confirm

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

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False
Alias:jfr

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:

Byte[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

ByContent
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False

-FilePath

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

Parameteregenskaper

Typ:

String[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

ByPath
Position:1
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False

-Force

Tillåter att cmdleten lägger till en signatur i en skrivskyddad fil. Även om du använder parametern Force kan cmdleten inte åsidosätta säkerhetsbegränsningar.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-HashAlgorithm

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

För PowerShell 7.3 är standardvärdet SHA256, som är Windows standardhashalgoritm. För tidigare versioner är standardvärdet 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.

Parameteregenskaper

Typ:String
Standardvärde:SHA256
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-IncludeChain

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

Giltiga värden är:

  • Signer: Innehåller endast undertecknarens certifikat.
  • NotRoot: Innehåller alla certifikat i certifikatkedjan, förutom rotutfärdare.
  • All: Innehåller alla certifikat i certifikatkedjan.

Parameteregenskaper

Typ:String
Standardvärde:NotRoot
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-LiteralPath

Anger sökvägen till en fil som signeras. Till skillnad från FilePathanvänds värdet för parametern LiteralPath precis som den skrivs. Inga tecken tolkas som wildcards. 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.

Parameteregenskaper

Typ:

String[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False
Alias:PSPath, SP

Parameteruppsättningar

ByLiteralPath
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument: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.

Parameteregenskaper

Typ:

String[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

ByContent
Position:Named
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument: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. URL:en måste inledas med http://.

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.

Anmärkning

PowerShell 7.3 har lagt till stöd för https:// URL:er med den här parametern. Det underliggande API:et stöder dock inte HTTPS. Om du använder HTTPS returnerar kommandot ett fel, men filen signeras utan tidsstämpel. Mer information finns i Issue #25130.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-WhatIf

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

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False
Alias:Wi

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

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 Signature-objekt som representerar det värde som angetts.

Kommentarer

Den här cmdleten är endast tillgänglig på Windows-plattformar.