Set-AuthenticodeSignature
Добавляет подпись Authenticode в скрипт PowerShell или другой файл.
Синтаксис
ByPath (По умолчанию)
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>]
Описание
Командлет Set-AuthenticodeSignature добавляет подпись Authenticode в любой файл, поддерживающий Subject Interface Package (SIP).
В файле скрипта PowerShell подпись представляет собой блок текста, указывающий конец инструкций, выполняемых в скрипте. Если при выполнении этого командлета в файле обнаружена подпись, она удаляется.
Примеры
Пример 1. Подписыв скрипт с помощью сертификата из локального хранилища сертификатов
Эти команды извлекают сертификат подписывания кода из поставщика сертификатов PowerShell и используют его для подписи скрипта PowerShell.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
Первая команда использует командлет Get-ChildItem и поставщик сертификатов PowerShell для получения сертификатов в подкаталоге Cert:\CurrentUser\My хранилища сертификатов. Диск Cert: — это диск, предоставляемый поставщиком сертификатов. Параметр CodeSigningCert, который поддерживается только поставщиком сертификатов, ограничивает сертификаты, полученные с помощью центра подписи кода. Команда сохраняет результат в переменной $cert.
Вторая команда определяет переменную $signingParameters в виде HashTable с параметрами командлета Set-AuthenticodeSignature для подписывания скрипта PSTestInternet2.ps1. Он использует параметр FilePath, чтобы указать имя скрипта, параметр сертификата, чтобы указать, что сертификат хранится в переменной $cert, а параметр HashAlgorithm для задания алгоритма хэширования значение SHA256.
Третья команда подписывает скрипт, различая параметры, определенные в $signingParameters.
Замечание
Использование параметра CodeSigningCert с Get-ChildItem возвращает только сертификаты, которые имеют полномочия на подпись кода и содержат закрытый ключ. Если закрытый ключ отсутствует, сертификаты нельзя использовать для подписывания.
Пример 2 - Подписать скрипт с помощью сертификата из PFX-файла
Эти команды используют командлет Get-PfxCertificate для загрузки сертификата подписи кода. Затем используйте его для подписывания скрипта PowerShell.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
Первая команда использует командлет Get-PfxCertificate для загрузки сертификата C:\Test\MySign.pfx в переменную $cert.
Вторая команда определяет переменную $signingParameters в виде HashTable с параметрами командлета Set-AuthenticodeSignature для подписывания скрипта ServerProps.ps1. Он использует параметр FilePath, чтобы указать имя скрипта, параметр сертификата, чтобы указать, что сертификат хранится в переменной $cert, а параметр HashAlgorithm для задания алгоритма хэширования значение SHA256.
Третья команда подписывает скрипт, различая параметры, определенные в $signingParameters.
Если файл сертификата защищен паролем, PowerShell запрашивает пароль.
Пример 3. Добавление подписи, включающей корневой удостоверяющий центр
Эта команда добавляет цифровую подпись, которая включает корневой центр в цепочку доверия, и она подписана сторонним сервером метки времени.
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
Команда использует параметр FilePath, чтобы указать подписанный скрипт и параметр сертификата, чтобы указать сертификат, сохраненный в переменной $cert. Он использует параметр IncludeChain для включения всех подписей в цепочку доверия, включая корневой удостоверяющий центр. Он также использует параметр TimeStampServer для добавления метки времени в подпись.
Это предотвращает сбой скрипта при истечении срока действия сертификата.
Вторая команда подписывает скрипт, различая параметры, определенные в $signingParameters.
Параметры
-Certificate
Указывает сертификат, который будет использоваться для подписи скрипта или файла. Введите переменную, в которой хранится объект, представляющий сертификат или выражение, которое получает сертификат.
Чтобы найти сертификат, используйте Get-PfxCertificate или используйте командлет Get-ChildItem на диске сертификата Cert:. Если сертификат недействителен или не имеет code-signing центра, команда завершается ошибкой.
Свойства параметров
| Тип: | X509Certificate2 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 1 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Confirm
Запрашивает подтверждение перед запуском cmdlet.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | cf |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Content
Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, который Set-AuthenticodeSignature является производным. Однако поддержка этого параметра не реализована в Set-AuthenticodeSignature.
Свойства параметров
| Тип: | Byte[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
ByContent
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-FilePath
Указывает путь к файлу, подписанному.
Свойства параметров
| Тип: | String[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
ByPath
| Position: | 1 |
| Обязательно: | True |
| Значение из конвейера: | True |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-Force
Позволяет командлету добавлять подпись в файл только для чтения. Даже при использовании параметра Force командлет не может обойти ограничения безопасности.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-HashAlgorithm
Указывает алгоритм хэширования, используемый Windows для вычисления цифровой подписи для файла.
Значение по умолчанию — SHA1. Файлы, подписанные другим алгоритмом хэширования, могут быть не распознаны в других системах. Какие алгоритмы поддерживаются, зависят от версии операционной системы.
См. список возможных значений в структуре HashAlgorithmName.
Свойства параметров
| Тип: | String |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-IncludeChain
Определяет, какие сертификаты в цепочке доверия сертификатов включены в цифровую подпись. NotRoot используется по умолчанию.
Допустимые значения:
-
Signer: включает только сертификат подписи. -
NotRoot. Включает все сертификаты в цепочке сертификатов, за исключением корневого центра. -
All. Включает все сертификаты в цепочке сертификатов.
Свойства параметров
| Тип: | String |
| Default value: | NotRoot |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-LiteralPath
Указывает путь к файлу, подписанному. В отличие от FilePath, значение параметра LiteralPath используется точно так же, как он типизированный. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell на то, что не следует интерпретировать какие-либо символы как управляющие последовательности.
Свойства параметров
| Тип: | String[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | PSPath |
Наборы параметров
ByLiteralPath
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-SourcePathOrExtension
Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, который Set-AuthenticodeSignature является производным. Однако поддержка этого параметра не реализована в Set-AuthenticodeSignature.
Свойства параметров
| Тип: | String[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
ByContent
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | True |
| Значение из конвейера по имени свойства: | True |
| Значение из оставшихся аргументов: | False |
-TimestampServer
Использует указанный сервер меток времени для добавления метки времени в сигнатуру. Введите URL-адрес сервера меток времени в виде строки. URL-адрес должен начинаться с http://.
Метка времени представляет точное время добавления сертификата в файл. Метка времени предотвращает сбой скрипта, если срок действия сертификата истек, так как пользователи и программы могут убедиться, что сертификат действителен во время подписания.
Свойства параметров
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-WhatIf
Показывает, что произойдет, если командлет будет запущен. Командлет не выполняется.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | wi |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
String
Можно передавать строку, содержащую путь к файлу для этого командлета.
Выходные данные
Signature
Этот командлет возвращает объект сигнатуры, представляющий значение, которое он установил.