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

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

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

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 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 använder cmdleten Set-AuthenticodeSignature för att signera skriptet PSTestInternet2.ps1 . Den använder FilePath-parametern för att ange namnet på skriptet och certifikatparametern för att ange att certifikatet lagras i variabeln $cert .

Anteckning

Om du använder 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 certifikatet C:\Test\MySign.pfx i variabeln $cert .

Det andra kommandot använder Set-AuthenticodeSignature för att signera skriptet. FilePath-parameternSet-AuthenticodeSignature för anger sökvägen till skriptfilen som signeras och parametern Cert skickar variabeln $cert 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 den signeras av en tidsstämpelserver från tredje part.

Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"

Kommandot använder filepath-parametern för att ange skriptet som signeras och certifikatparametern för att ange certifikatet som sparas i variabeln $cert . 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.

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 saknar code-signing behörighet misslyckas kommandot.

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

-Confirm

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

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

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

-FilePath

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

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

-Force

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 hash-algoritm kanske inte känns igen på andra system. Vilka algoritmer som stöds beror på vilken version av operativsystemet som används.

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

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

-IncludeChain

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

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.
Type:String
Position:Named
Default value:NotRoot
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

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

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 börja med https:// eller 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 verifiera att certifikatet var giltigt vid tidpunkten för signeringen.

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

-WhatIf

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

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 angetts.

Kommentarer

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