Udostępnij za pośrednictwem


Set-AuthenticodeSignature

Dodaje podpis Authenticode do skryptu programu PowerShell lub innego pliku.

Składnia

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

Opis

To polecenie cmdlet jest dostępne tylko na platformie Windows.

Polecenie Set-AuthenticodeSignature cmdlet dodaje podpis Authenticode do dowolnego pliku obsługującego pakiet interfejsu podmiotu (SIP).

W pliku skryptu programu PowerShell podpis ma postać bloku tekstu, który wskazuje koniec instrukcji wykonywanych w skry skryfcie. Jeśli plik zawiera podpis po uruchomieniu tego polecenia cmdlet, ten podpis zostanie usunięty.

Przykłady

Przykład 1 — podpisywanie skryptu przy użyciu certyfikatu z lokalnego magazynu certyfikatów

Te polecenia pobierają certyfikat podpisywania kodu od dostawcy certyfikatów programu PowerShell i używają go do podpisywania skryptu programu PowerShell.

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

Pierwsze polecenie używa Get-ChildItem polecenia cmdlet i dostawcy certyfikatów programu PowerShell do pobrania certyfikatów w Cert:\CurrentUser\My podkatalogu magazynu certyfikatów. Dysk Cert: jest dyskiem udostępnianym przez dostawcę certyfikatów. Parametr CodeSigningCert obsługiwany tylko przez dostawcę certyfikatów ogranicza certyfikaty pobrane do tych z urzędem podpisywania kodu. Polecenie przechowuje wynik w zmiennej $cert .

Drugie polecenie definiuje zmienną $signingParametersjako wartość HashTable z parametrami Set-AuthenticodeSignature polecenia cmdlet w celu podpisania skryptu PSTestInternet2.ps1 . Używa parametru FilePath , aby określić nazwę skryptu, parametr Certyfikatu , aby określić, że certyfikat jest przechowywany w $cert zmiennej, a parametr HashAlgorithm ustawić algorytm wyznaczania wartości skrótu na SHA256.

Trzecie polecenie podpisuje skrypt przez wplatanie parametrów zdefiniowanych w pliku $signingParameters.

Uwaga

Użycie parametru CodeSigningCert z Get-ChildItem zwraca tylko certyfikaty, które mają urząd podpisywania kodu i zawierają klucz prywatny. Jeśli nie ma klucza prywatnego, certyfikaty nie mogą być używane do podpisywania.

Przykład 2 — podpisywanie skryptu przy użyciu certyfikatu z pliku PFX

Te polecenia używają Get-PfxCertificate polecenia cmdlet do załadowania certyfikatu podpisywania kodu. Następnie użyj go do podpisania skryptu programu PowerShell.

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

Pierwsze polecenie używa polecenia cmdlet do załadowania certyfikatu Get-PfxCertificate C:\Test\MySign.pfx do zmiennej $cert .

Drugie polecenie definiuje zmienną $signingParametersjako wartość HashTable z parametrami Set-AuthenticodeSignature polecenia cmdlet w celu podpisania skryptu ServerProps.ps1 . Używa parametru FilePath , aby określić nazwę skryptu, parametr Certyfikatu , aby określić, że certyfikat jest przechowywany w $cert zmiennej, a parametr HashAlgorithm ustawić algorytm wyznaczania wartości skrótu na SHA256.

Trzecie polecenie podpisuje skrypt przez wplatanie parametrów zdefiniowanych w pliku $signingParameters.

Jeśli plik certyfikatu jest chroniony hasłem, program PowerShell wyświetli monit o podanie hasła.

Przykład 3 — dodawanie podpisu zawierającego urząd główny

To polecenie dodaje podpis cyfrowy, który zawiera urząd główny w łańcuchu zaufania i jest podpisany przez serwer sygnatury czasowej innej firmy.

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

Pierwsze polecenie definiuje zmienną $signingParametersjako wartość HashTable z parametrami Set-AuthenticodeSignature polecenia cmdlet w celu podpisania skryptu. Używa parametru FilePath , aby określić ścieżkę do skryptu, parametr certyfikatu , aby określić, że certyfikat jest przechowywany w $cert zmiennej, oraz parametr HashAlgorithm , aby ustawić algorytm wyznaczania wartości skrótu na SHA256. Używa parametru IncludeChain , aby uwzględnić wszystkie podpisy w łańcuchu zaufania, w tym urząd główny. Używa również parametru TimeStampServer , aby dodać sygnaturę czasową do podpisu. Zapobiega to awarii skryptu po wygaśnięciu certyfikatu.

Drugie polecenie podpisuje skrypt przez wplatanie parametrów zdefiniowanych w pliku $signingParameters.

Parametry

-Certificate

Określa certyfikat, który będzie używany do podpisywania skryptu lub pliku. Wprowadź zmienną, która przechowuje obiekt reprezentujący certyfikat lub wyrażenie, które pobiera certyfikat.

Aby znaleźć certyfikat, użyj Get-PfxCertificate polecenia cmdlet lub użyj polecenia Get-ChildItem cmdlet na dysku certyfikatu Cert: . Jeśli certyfikat jest nieprawidłowy lub nie ma code-signing urzędu, polecenie kończy się niepowodzeniem.

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

-Confirm

Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.

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

-Content

Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, z którego Set-AuthenticodeSignature pochodzi. Jednak obsługa tego parametru nie jest zaimplementowana w programie Set-AuthenticodeSignature.

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

-FilePath

Określa ścieżkę do pliku, który jest podpisany.

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

-Force

Umożliwia poleceniem cmdlet dołączanie podpisu do pliku tylko do odczytu. Nawet przy użyciu parametru Force polecenie cmdlet nie może zastąpić ograniczeń zabezpieczeń.

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

-HashAlgorithm

Określa algorytm wyznaczania skrótu używany przez system Windows do obliczania podpisu cyfrowego dla pliku.

Domyślnie jest to algorytm SHA1. Pliki podpisane za pomocą innego algorytmu tworzenia skrótów mogą nie być rozpoznawane w innych systemach. Obsługiwane algorytmy zależą od wersji systemu operacyjnego.

Aby uzyskać listę możliwych wartości, zobacz HashAlgorithmName, struktura.

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

-IncludeChain

Określa, które certyfikaty w łańcuchu zaufania certyfikatów są zawarte w podpisie cyfrowym. NotRoot jest wartością domyślną.

Prawidłowe wartości to:

  • Podpisz: zawiera tylko certyfikat użytkownika podpisjącego.
  • NotRoot: zawiera wszystkie certyfikaty w łańcuchu certyfikatów, z wyjątkiem urzędu głównego.
  • Wszystkie: obejmuje wszystkie certyfikaty w łańcuchu certyfikatów.
Type:String
Position:Named
Default value:NotRoot
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Określa ścieżkę do pliku, który jest podpisany. W przeciwieństwie do parametru FilePath wartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.

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

-SourcePathOrExtension

Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, z którego Set-AuthenticodeSignature pochodzi. Jednak obsługa tego parametru nie jest zaimplementowana w programie Set-AuthenticodeSignature.

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

-TimestampServer

Używa określonego serwera sygnatury czasowej, aby dodać sygnaturę czasową do podpisu. Wpisz adres URL serwera sygnatur czasowych jako ciąg.

Sygnatura czasowa reprezentuje dokładny czas dodania certyfikatu do pliku. Sygnatura czasowa uniemożliwia skryptowi niepowodzenie, jeśli certyfikat wygaśnie, ponieważ użytkownicy i programy mogą sprawdzić, czy certyfikat był prawidłowy w momencie podpisywania.

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

-WhatIf

Pokazuje, co się stanie po uruchomieniu polecenia cmdlet. Polecenie cmdlet nie zostało uruchomione.

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

Dane wejściowe

String

Możesz potokować ciąg zawierający ścieżkę pliku do tego polecenia cmdlet.

Dane wyjściowe

Signature

To polecenie cmdlet zwraca obiekt Signature reprezentujący ustawioną wartość.

Uwagi

To polecenie cmdlet jest dostępne tylko na platformach windows.