Set-AuthenticodeSignature
Dodaje podpis Authenticode do skryptu programu PowerShell lub innego pliku.
Składnia
ByPath (domyślnie)
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>]
Opis
Polecenie cmdlet Set-AuthenticodeSignature dodaje podpis Authenticode do każdego 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 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 polecenia cmdlet Get-ChildItem i dostawcy certyfikatów programu PowerShell do pobrania certyfikatów w podkatalogu Cert:\CurrentUser\My 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 definiuje zmienną $signingParameters jako HashTable z parametrami polecenia cmdlet Set-AuthenticodeSignature 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 zmiennej $cert, a parametr HashAlgorithm ustawić algorytm wyznaczania wartości skrótu na SHA256.
Trzecie polecenie podpisuje skrypt przez przeplatanie parametrów zdefiniowanych w $signingParameters.
Uwaga / Notatka
Parametr CodeSigningCert z Get-ChildItem zwraca tylko certyfikaty, które mają uprawnienia do 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ą polecenia cmdlet Get-PfxCertificate 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 Get-PfxCertificate do załadowania certyfikatu C:\Test\MySign.pfx do zmiennej $cert.
Drugie polecenie definiuje zmienną $signingParameters jako HashTable z parametrami polecenia cmdlet Set-AuthenticodeSignature 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 zmiennej $cert, a parametr HashAlgorithm ustawić algorytm wyznaczania wartości skrótu na SHA256.
Trzecie polecenie podpisuje skrypt przez przeplatanie parametrów zdefiniowanych w $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
Polecenie używa parametru FilePath w celu określenia podpisanego skryptu oraz parametru Certificate w celu określenia certyfikatu zapisanego w zmiennej $cert. Używa on 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ć znacznik czasu do podpisu.
Zapobiega to awarii skryptu po wygaśnięciu certyfikatu.
Drugie polecenie podpisuje skrypt przez przeplatanie parametrów zdefiniowanych w $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 lub użyj polecenia Get-ChildItem na dysku certyfikatu Cert:. Jeśli certyfikat jest nieprawidłowy lub nie ma code-signing urzędu, polecenie kończy się niepowodzeniem.
Właściwości parametru
| Typ: | X509Certificate2 |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | 1 |
| Obowiązkowe: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Confirm
Prosi o potwierdzenie przed uruchomieniem cmdletu.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | por |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Content
Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, na podstawie Set-AuthenticodeSignature. Jednak obsługa tego parametru nie jest zaimplementowana w Set-AuthenticodeSignature.
Właściwości parametru
| Typ: | Byte[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
ByContent
| Position: | Named |
| Obowiązkowe: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | True |
| Wartość z pozostałych argumentów: | False |
-FilePath
Określa ścieżkę do podpisanego pliku.
Właściwości parametru
| Typ: | String[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
ByPath
| Position: | 1 |
| Obowiązkowe: | True |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | True |
| Wartość z pozostałych argumentów: | False |
-Force
Umożliwia poleceniem cmdlet dołączanie podpisu do pliku tylko do odczytu. Nawet, gdy używa się parametru Force, polecenie cmdlet nie jest w stanie zastąpić ograniczeń zabezpieczeń.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-HashAlgorithm
Określa algorytm wyznaczania skrótu używany przez system Windows do obliczania podpisu cyfrowego dla pliku.
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 strukturę HashAlgorithmName.
Właściwości parametru
| Typ: | String |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | 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:
-
Signer: zawiera tylko certyfikat użytkownika podpisjącego. -
NotRoot: obejmuje wszystkie certyfikaty w łańcuchu certyfikatów, z wyjątkiem urzędu głównego. -
All: obejmuje wszystkie certyfikaty w łańcuchu certyfikatów.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | NotRoot |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-LiteralPath
Określa ścieżkę do podpisanego pliku. W przeciwieństwie do FilePathwartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Żadne znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze cudzysłowy wskazują programowi PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Właściwości parametru
| Typ: | String[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | PSPath |
Zestawy parametrów
ByLiteralPath
| Position: | Named |
| Obowiązkowe: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | True |
| Wartość z pozostałych argumentów: | False |
-SourcePathOrExtension
Ten parametr pojawia się na liście składni, ponieważ jest on zdefiniowany w klasie bazowej, na podstawie Set-AuthenticodeSignature. Jednak obsługa tego parametru nie jest zaimplementowana w Set-AuthenticodeSignature.
Właściwości parametru
| Typ: | String[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
ByContent
| Position: | Named |
| Obowiązkowe: | True |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | True |
| Wartość z pozostałych argumentów: | False |
-TimestampServer
Używa określonego serwera sygnatury czasowej, aby dodać sygnaturę czasową do podpisu. Wpisz adres URL serwera sygnatur czasowych jako ciąg. URL musi zaczynać się od 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.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-WhatIf
Pokazuje, co się stanie, jeśli polecenie cmdlet zostanie uruchomione. Cmdlet nie został uruchomiony.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | Wi |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
CommonParameters
To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
Dane wejściowe
String
Możesz przesłać strumieniowo ciąg znaków zawierający ścieżkę pliku do tego cmdletu.
Dane wyjściowe
Signature
To polecenie cmdlet zwraca obiekt Signature reprezentujący ustawioną wartość.