我想在用户的ssl存储中安装证书。因此,我想使用用户凭据运行Start-Process,并设置-LoadUserProfile。否则,导入过程将失败,并显示“找不到文件”。

由于我想在配置VM时执行此操作,因此我使用了CustomScriptExtension。使用RDP登录到计算机但在扩展名中未登录时,该命令运行正常。我收到“启动过程:由于错误而无法运行此命令:访问被拒绝。”

我认为执行用户(NTAUTHORITY \ SYSTEM)具有足够的权限来执行命令。有什么建议么?

生成具有随 secret 码的新用户帐户,其凭据存储在$credentials中。 $filePath指向自定义C#命令行工具以导入证书。 $certPass作为参数提供。这是我的代码:

Start-Process -LoadUserProfile -NoNewWindow -Credential $credentials -FilePath $filePath -ArgumentList @("--importCertificate", $certPass)

这个问题在某种程度上与this one有关。

最佳答案

出于安全原因,不允许SYSTEM用户模拟其他用户(通过Start-Process,runas等)-有关模拟的详细信息,请参见Impersonate a client after authentication

虽然可以尝试调整GPO或编辑注册表(使用诸如ntrights.exe之类的命令行工具)以使用Start-Process,但我更喜欢using PsExec (from the Sysinternals Suite)。与Start-Process相似,PsExec允许您输入用户名和密码,但是还具有-h标志,该标志使用帐户的提升 token (如果可用)来调用进程。

您的命令将如下所示:

psexec -h -u $username -p $password c:\path\to\tool.exe --importCertificate $certPass

在我的ARM模板CustomScriptExtension PowerShell脚本中,我喜欢使用Chocolatey安装PsExec:
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
C:\ProgramData\chocolatey\bin\choco.exe install -y sysinternals

08-04 12:55