如何签署文件夹下的所有msi文件?

时间:2012-01-30 12:01:53

标签: powershell batch-file powershell-v2.0 code-signing

我正在使用signtool签署我的msi。

如何递归搜索文件夹和子文件夹中的所有msi,然后将它们全部签名?

4 个答案:

答案 0 :(得分:7)

之前的2个答案显示了PowerShell解决方案。 您也可以通过CMD.EXE命令提示符轻松完成此操作。

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

显然,您需要修改您的signtool选项以满足您的需求。重要的是%F将迭代地保存每个.MSI文件的名称。

如果要从批处理文件中运行命令,则%必须加倍,因此%F在两个位置都变为%% F.

答案 1 :(得分:5)

以下是使用代码签名证书的示例(我在$ cert中只有一个证书):

$cert = Get-ChildItem -Path Cert: -CodeSigningCert -Recurse
Get-ChildItem -Path C:\MsiFolder -Filter *.msi -Recurse | Set-AuthenticodeSignature -Certificate $cert

答案 2 :(得分:3)

假设您知道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
    }
}

答案 3 :(得分:0)

只有一个密码提示!

$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