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, który obsługuje pakiet interfejsu podmiotu (SIP).
W pliku skryptu programu PowerShell podpis ma postać bloku tekstu, który wskazuje koniec instrukcji wykonywanych w skrycie. Jeśli plik zawiera podpis, gdy to polecenie cmdlet zostanie uruchomione, 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
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
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 , który jest 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 używa Set-AuthenticodeSignature
polecenia cmdlet do podpisania skryptu PSTestInternet2.ps1
. Używa parametru FilePath do określenia nazwy skryptu i parametru Certyfikat w celu określenia, czy certyfikat jest przechowywany w zmiennej $cert
.
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
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert
Pierwsze polecenie używa Get-PfxCertificate
polecenia cmdlet do załadowania certyfikatu C:\Test\MySign.pfx do zmiennej $cert
.
Drugie polecenie używa polecenia Set-AuthenticodeSignature
do podpisania skryptu. Parametr FilePath określa Set-AuthenticodeSignature
ścieżkę do podpisanego pliku skryptu, a parametr certyfikatu przekazuje $cert
zmienną zawierającą certyfikat do Set-AuthenticodeSignature
.
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 główny urząd w łańcuchu zaufania i jest podpisany przez serwer sygnatury czasowej innej firmy.
Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"
Polecenie używa parametru FilePath do określenia podpisanego skryptu i parametru Certyfikat w celu określenia certyfikatu zapisanego w zmiennej $cert
. Używa parametru IncludeChain do uwzględnienia wszystkich podpisów w łańcuchu zaufania, w tym urzędu głównego. Używa również parametru TimeStampServer , aby dodać znacznik czasu do podpisu.
Zapobiega to awarii skryptu po wygaśnięciu certyfikatu.
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 Get-ChildItem
polecenia cmdlet na dysku certyfikatów 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 jest wyświetlany na liście składni, ponieważ jest zdefiniowany w klasie bazowej, która Set-AuthenticodeSignature
pochodzi z. Jednak obsługa tego parametru nie jest implementowana 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 polecenie 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ótów używany przez system Windows do obliczania podpisu cyfrowego dla pliku.
W przypadku programu PowerShell 7.3 wartość domyślna to SHA256, czyli domyślny algorytm wyznaczania wartości skrótu systemu Windows. W przypadku wcześniejszych wersji wartość domyślna to 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: | SHA256 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeChain
Określa, które certyfikaty w łańcuchu zaufania certyfikatów znajdują się w podpisie cyfrowym. NotRoot jest wartością domyślną.
Prawidłowe wartości:
- Podpisywanie: 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 je ująć w pojedynczy cudzysłów. Znaki pojedynczego 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 jest wyświetlany na liście składni, ponieważ jest zdefiniowany w klasie bazowej, która Set-AuthenticodeSignature
pochodzi z. Jednak obsługa tego parametru nie jest implementowana 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 sygnatury czasowej jako ciąg. Adres URL musi zaczynać się od https://
lub http://
.
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
Możesz potokować ciąg zawierający ścieżkę pliku do tego polecenia cmdlet.
Dane wyjściowe
To polecenie cmdlet zwraca obiekt Signature reprezentujący ustawioną wartość.
Uwagi
To polecenie cmdlet jest dostępne tylko na platformach systemu Windows.