我想在用户ssl商店中安装证书。因此,我希望使用用户凭据运行Start-Process
并设置-LoadUserProfile
。否则导入过程将失败并显示“找不到文件”。
由于我想在配置我的VM时执行此操作,因此我使用的是CustomScriptExtension。使用RDP登录计算机时该命令运行正常,但扩展名中没有。我收到“Start-Process:由于错误导致无法运行此命令:访问被拒绝。”
我认为执行用户(NTAUTHORITY \ SYSTEM)有足够的权限执行命令。有什么建议吗?
生成具有随机密码的新用户帐户,其凭据存储在$credentials
中。 $filePath
指向用于导入证书的自定义c#命令行工具。 $certPass
作为参数提供。这是我的代码:
Start-Process -LoadUserProfile -NoNewWindow -Credential $credentials -FilePath $filePath -ArgumentList @("--importCertificate", $certPass)
这个问题在某种程度上与this one有关。
答案 0 :(得分:2)
出于安全原因,不允许SYSTEM用户冒充其他用户(通过Start-Process,runas等) - 有关假冒的详细信息,请参阅Impersonate a client after authentication。
虽然您可以尝试调整GPO或编辑注册表(使用命令行工具,如ntrights.exe),但为了使用Start-Process,我更喜欢using PsExec (from the Sysinternals Suite)。与Start-Process类似,PsExec允许您传入用户名和密码,但也有一个-h标志,可以使用帐户的提升令牌调用该进程(如果可用)。
您的命令将类似于:
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