Как подписать все файлы MSI, которые находятся в папке? - PullRequest
7 голосов
/ 30 января 2012

Я использую signtool для подписи моего MSI.

Как рекурсивно искать все MSI в папке и подпапке, а затем подписывать их все?

Ответы [ 4 ]

7 голосов
/ 30 января 2012

Предыдущие 2 ответа показывают решение PowerShell. Вы можете сделать это достаточно легко из командной строки CMD.EXE.

for /r "yourRootFolder" %F in (*.msi) do signtool sign /a "%F"

Очевидно, что вам нужно изменить параметры Signtool в соответствии с вашими потребностями. Важный бит% F будет итеративно содержать имя каждого файла .MSI.

Если вы хотите запустить команду из пакетного файла, то% должен быть удвоен, поэтому% F становится %% F в обоих местах.

5 голосов
/ 30 января 2012

Вот пример использования сертификата для подписи кода (у меня только один сертификат в $ cert):

$cert = Get-ChildItem -Path Cert: -CodeSigningCert -Recurse
Get-ChildItem -Path C:\MsiFolder -Filter *.msi -Recurse | Set-AuthenticodeSignature -Certificate $cert
3 голосов
/ 30 января 2012

Предполагая, что вы знаете, какие параметры командной строки вам нужны для инструмента подписи MSI, вы можете получить все MSI в данной папке, например:

Get-ChildItem -recurse -path C:\MsiFolder -Include *.msi | ForEach-Object {
    $msiPath = $_.FullName
    $output = & the_msi_sign_tool.exe -msifile $msiPath -parameterB -parameterC 2>&1
    if ($LASTEXITCODE -ne 0) {
        Write-Error $output
    }
}
0 голосов
/ 28 июня 2017

Только одна подсказка пароля!

$signExe = 'C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe'
$files = gci 'C:\Temp\*' -Include *.msi | %{('"{0}"' -f $_.FullName)}
$fingerprint = '00000000000000000000000000000000000000000'
$timestampUrl = 'http://rfc3161timestamp.globalsign.com/advanced'

$filesInputArg = $files -join " "
.$signExe sign /tr $timestampUrl /td SHA256 /sha1 $fingerprint $filesInputArg
...