Поделиться через


Set-AuthenticodeSignature

Добавляет подпись Authenticode в скрипт PowerShell или другой файл.

Синтаксис

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

Описание

Этот командлет доступен только на платформе Windows.

Командлет Set-AuthenticodeSignature добавляет подпись Authenticode в любой файл, поддерживающий пакет интерфейса субъекта (SIP).

В файле скрипта PowerShell подпись представляет собой блок текста, указывающий конец инструкций, выполняемых в скрипте. Если во время выполнения этого командлета есть подпись, эта подпись удаляется.

Примеры

Пример 1. Подписыв скрипт с помощью сертификата из локального хранилища сертификатов

Эти команды извлекают сертификат подписывания кода из поставщика сертификатов PowerShell и используют его для подписи скрипта PowerShell.

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert

Первая команда использует командлет Get-ChildItem и поставщик сертификатов PowerShell для получения сертификатов в подкаталоге Cert:\CurrentUser\My хранилища сертификатов. Диск Cert: — это диск, предоставляемый поставщиком сертификатов. Параметр CodeSigningCert, который поддерживается только поставщиком сертификатов, ограничивает сертификаты, полученные с помощью центра подписи кода. Команда сохраняет результат в переменной $cert.

Вторая команда использует командлет Set-AuthenticodeSignature для подписывания скрипта PSTestInternet2.ps1. Он использует параметр FilePath, чтобы указать имя скрипта и параметр сертификата, чтобы указать, что сертификат хранится в переменной $cert.

Заметка

Использование параметра CodeSigningCert с Get-ChildItem возвращает только сертификаты, имеющие центр подписи кода и содержащие закрытый ключ. Если закрытый ключ отсутствует, сертификаты нельзя использовать для подписывания.

Пример 2. Подписыв скрипт с помощью сертификата из PFX-файла

Эти команды используют командлет Get-PfxCertificate для загрузки сертификата подписи кода. Затем используйте его для подписывания скрипта PowerShell.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

Первая команда использует командлет Get-PfxCertificate для загрузки сертификата C:\Test\MySign.pfx в переменную $cert.

Вторая команда использует Set-AuthenticodeSignature для подписывания скрипта. Параметр FilePath Set-AuthenticodeSignature указывает путь к подписанному файлу скрипта, а параметр Cert передает переменную $cert, содержащую сертификат, в Set-AuthenticodeSignature.

Если файл сертификата защищен паролем, PowerShell запрашивает пароль.

Пример 3. Добавление подписи, включающей корневой центр

Эта команда добавляет цифровую подпись, содержащую корневой центр в цепочке доверия, и он подписан сторонним сервером метки времени.

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

Команда использует параметр FilePath, чтобы указать подписанный скрипт и параметр сертификата, чтобы указать сертификат, сохраненный в переменной $cert. Он использует параметр IncludeChain для включения всех подписей в цепочку доверия, включая корневой центр. Он также использует параметр TimeStampServer для добавления метки времени в подпись. Это предотвращает сбой скрипта при истечении срока действия сертификата.

Параметры

-Certificate

Указывает сертификат, который будет использоваться для подписи скрипта или файла. Введите переменную, в которой хранится объект, представляющий сертификат или выражение, которое получает сертификат.

Чтобы найти сертификат, используйте Get-PfxCertificate или используйте командлет Get-ChildItem на диске сертификата Cert:. Если сертификат недопустим или не имеет code-signing центра, команда завершается ошибкой.

Тип:X509Certificate2
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Content

Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, на основе Set-AuthenticodeSignature. Однако поддержка этого параметра не реализована в Set-AuthenticodeSignature.

Тип:Byte[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-FilePath

Указывает путь к файлу, подписанному.

Тип:String[]
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Force

Позволяет командлету добавлять подпись в файл только для чтения. Даже при использовании параметра force командлет не может переопределить ограничения безопасности.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-HashAlgorithm

Указывает алгоритм хэширования, используемый Windows для вычисления цифровой подписи для файла.

Для PowerShell 7.3 по умолчанию используется SHA256, который является алгоритмом хэширования Windows по умолчанию. Для более ранних версий по умолчанию используется SHA1. Файлы, подписанные другим алгоритмом хэширования, могут быть не распознаны в других системах. Какие алгоритмы поддерживаются, зависят от версии операционной системы.

Список возможных значений см. в разделе HashAlgorithmName.

Тип:String
Position:Named
Default value:SHA256
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-IncludeChain

Определяет, какие сертификаты в цепочке доверия сертификатов включены в цифровую подпись. NotRoot используется по умолчанию.

Допустимые значения:

  • Подписыватель: включает только сертификат подписи.
  • NotRoot: включает все сертификаты в цепочке сертификатов, за исключением корневого центра.
  • Все: включает все сертификаты в цепочке сертификатов.
Тип:String
Position:Named
Default value:NotRoot
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь к файлу, подписанному. В отличие от FilePath, значение параметра LiteralPath используется точно так же, как и тип. Символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности.

Тип:String[]
Aliases:PSPath
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-SourcePathOrExtension

Этот параметр отображается в описании синтаксиса, так как он определен в базовом классе, на основе Set-AuthenticodeSignature. Однако поддержка этого параметра не реализована в Set-AuthenticodeSignature.

Тип:String[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-TimestampServer

Использует указанный сервер меток времени для добавления метки времени в сигнатуру. Введите URL-адрес сервера меток времени в виде строки. URL-адрес должен начинаться с https:// или http://.

Метка времени представляет точное время добавления сертификата в файл. Метка времени предотвращает сбой скрипта, если срок действия сертификата истек, так как пользователи и программы могут убедиться, что сертификат действителен во время подписания.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-WhatIf

Показывает, что произойдет, если командлет выполняется. Командлет не выполняется.

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, содержащую путь к файлу для этого командлета.

Выходные данные

Signature

Этот командлет возвращает объект сигнатуры, представляющий заданное значение.

Примечания

Этот командлет доступен только на платформах Windows.