Я создаю сценарий, который загрузит и установит кучу программ. Одна из этих программ зависит от виртуального драйвера, которому необходимо импортировать сертификат для работы. Обычно установщик делает это за вас в графическом интерфейсе и просто открывает диалоговое окно подтверждения, спрашивающее, доверяете ли вы этому драйверу. Однако для сценария, который я пишу, такое прерывание недопустимо.
Я нашел способ экспортировать сертификат через графический интерфейс свойств файла и могу импортировать этот файл со сценарием, что позволило мне выполнить установку без какого-либо взаимодействия с пользователем. Однако для развертывания и полной автоматизации этого сценария мне также необходимо иметь возможность экспортировать файл сертификата из установщика с помощью сценария. Это можно сделать?
Весь процесс можно выполнить в PowerShell, используя X509Certificate класс, доступный в платформе .Net.
Первое, что вам нужно сделать, это получить файл сертификата из подписанного файла. Это делается с помощью функции CreateFromCertFile. Обратите внимание, что функция может принимать только полные пути, а не относительные.
Затем вы можете открыть хранилище сертификатов на локальном компьютере и импортировать сертификат. Для записи в хранилище локального компьютера это необходимо выполнить от имени администратора.
Add-Type -AssemblyName System.Security
# Create a new certificate extracted from the signed file.
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate]::CreateFromCertFile('c:\temp\SetupVirtualCloneDrive5450.exe')
# Open the Trusted Publishers cert store and add the certificate in.
$cert_store = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList 'TrustedPublisher', 'LocalMachine' | ForEach-Object {
$_.Open('ReadWrite')
$_.Add($certificate)
$_.Close()
}
FYI, я использовал этот метод для установки гостевых дополнений VirtualBox, которые также имели подсказки драйверов.