我有一个安装证书并安装驱动程序的驱动程序安装脚本。
我将其作为内置管理员帐户运行,该帐户应具有完全管理员权限(无管理员批准模式,无UAC)。这一切都在Windows 10 1709中。
现在我的设置就是:
installdrivers.ps1
:
$root_dir = "$env:HOMEDRIVE/Drivers"
$output_dir = $root_dir + '/' + 'certs'
Get-ChildItem $output_dir | % {
Import-Certificate -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -FilePath $_.FullName | Out-Null
}
pnpunattend auditsystem /L
#leave at PowerShell prompt
powershell
从PoSH终端,ISE或GUI手动运行时,脚本运行正常。
但是,当我在登录时启动它(通过开始菜单启动,“RunOnce”注册表项,或者甚至作为登录shell(在Winlogon中的注册表中设置),我得到以下内容:
Import-Certificate : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) At C:\Drivers\x64\installdrivers.ps1:61 char:5 + Import-Certificate -CertStoreLocation Cert:\LocalMachine\TrustedP ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Import-Certificate], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.CertificateServices.Commands.ImportCertificateCommand
我知道我的脚本在某种程度上以管理员身份运行,因为脚本的驱动程序部分运行良好。
我尝试在调用脚本时手动升级,但这没有区别:
$new_process = New-Object System.Diagnostics.ProcessStartInfo "PowerShell"
$new_process.Arguments = "powershell.exe $Env:HOMEDRIVE\Drivers\x64\installdrivers.ps1"
$new_process.Verb = "runas"
[System.Diagnostics.Process]::Start($new_process)
任何人都知道这里可能会发挥什么作用?
编辑:
确认certutil.exe
确实有效:
certutil -Enterprise -addstore "TrustedPublisher" $_.FullName
我认为以上功能与下面的功能相同是错误的吗?
Import-Certificate -CertStoreLocation Cert:\LocalMachine\TrustedPublisher -FilePath $_.FullName