CustomScriptExtension无法运行Start-Process(访问被拒绝)

3

我想在用户的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)

这个问题在某种程度上与这个问题相关。
1个回答

3

出于安全原因,SYSTEM用户不允许模拟其他用户(通过Start-Process、runas等方式)——请参阅身份验证后模拟客户端以了解有关模拟的详细信息。

尽管您可以尝试调整GPO或编辑注册表(使用类似ntrights.exe的命令行工具)以使用Start-Process,但我更喜欢使用Sysinternals套件中的PsExec。与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

如果首次运行,请不要忘记加上/accepteula参数。 - Gökhan Kurt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接