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


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

Описание

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

Командлет Set-AuthenticodeSignature добавляет подпись Authenticode в любой файл, поддерживающий Subject Interface Package (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, чтобы указать имя скрипта и параметр сертификата , чтобы указать, что сертификат хранится в переменной .

Замечание

Использование параметра 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 для подписывания скрипта. Параметр Set-AuthenticodeSignature указывает путь к подписанному файлу скрипта, а параметр Cert передает переменную $cert, содержащую сертификат, в Set-AuthenticodeSignature.

Если файл сертификата защищен паролем, 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 для добавления метки времени в подпись. Это предотвращает сбой скрипта при истечении срока действия сертификата.

Параметры

-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 для вычисления цифровой подписи для файла.

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

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

Свойства параметра

Тип:String
Default value:SHA256
Поддерживаются подстановочные знаки: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, LP

Наборы параметров

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://.

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

Замечание

PowerShell 7.3 добавила поддержку url-адресов https:// с этим параметром. Однако базовый API не поддерживает HTTPS. При использовании HTTPS команда возвращает ошибку, но файл подписан без метки времени. Дополнительные сведения см. в разделе Проблема No 25130.

Свойства параметра

Тип: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

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

Примечания

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