我正在编写一个脚本,用于下载和安装一堆程序。其中一个程序依赖于虚拟驱动程序,该驱动程序需要导入其证书才能运行。通常,安装程序会在 GUI 中为您执行此操作,并弹出一个确认对话框询问您是否信任此驱动程序。但是,对于我正在编写的脚本来说,这种中断是不可接受的。
我找到了一种通过文件属性 GUI 导出证书的方法,并可以使用脚本导入该文件,这样我就无需任何用户交互即可安装。但是,为了部署并完全自动化此脚本,我还需要能够通过脚本从安装程序导出证书文件。可以这样做吗?
答案1
整个过程可以在 powershell 中使用X509证书.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()
}
仅供参考,我使用此方法安装了 VirtualBox Guest Additions,它也有驱动程序提示。