windows - Import-certifikat mærkelig adfærd kører som admin

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et driverinstallationsskript, der installerer certifikater og installerer drivere.


Jeg kører den som den indbyggede administratorkonto, som skal have fuld administratorrettigheder (ingen administratorgodkendelsesfunktion, ingen UAC). Dette er alt i Windows   10 1709.


Lige nu er mit setup det her:


installdrivers.ps1:


$root\_dir = "$env:HOMEDRIVE/Drivers"
$output\_dir = $root\_dir + '/' + 'certs'

Get-ChildItem $output\_dir | \% {
    Import-Certificate -CertStoreLocation Cert:LocalMachineTrustedPublisher -FilePath $\_.FullName  | Out-Null
}

pnpunattend auditsystem /L

#leave at PowerShell prompt
powershell


Scriptet fungerer fint, når du kører manuelt, enten fra en PoSH-terminal, ISE eller fra GUI.


Men når jeg starter det ved login (enten via Start Menu startup, 'RunOnce' registreringsdatabasenøgle eller endda som login shell (angivet i registreringsdatabasen i Winlogon), får jeg nedenstående:


Import-Certificate : Access is denied. (Exception from HRESULT: 0x80070005
(E\_ACCESSDENIED))
At C:Driversx64installdrivers.ps1:61 char:5
+     Import-Certificate -CertStoreLocation Cert:LocalMachineTrustedP ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Certificate], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.CertificateServices.Commands.ImportCertificateCommand


Jeg ved, at mit script kører som administrator til en vis grad, fordi driverens del af scriptet udføres fint.


Jeg forsøgte manuelt at eskalere efter at kalde scriptet, men det gør ingen forskel:


$new\_process = New-Object System.Diagnostics.ProcessStartInfo "PowerShell"
$new\_process.Arguments = "powershell.exe $Env:HOMEDRIVEDriversx64installdrivers.ps1"
$new\_process.Verb = "runas"
[System.Diagnostics.Process]::Start($new\_process)


Nogen har nogen ide om, hvad der kan være i spil her?


EDIT:

Bekræftet at certutil.exe virker:


certutil -Enterprise -addstore "TrustedPublisher" $\_.FullName


Er jeg forkert ved at tro, at ovenstående skal være identisk med nedenstående i funktionalitet?


Import-Certificate -CertStoreLocation Cert:LocalMachineTrustedPublisher -FilePath $\_.FullName

Bedste reference