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

时间:2017-01-09 14:51:08

标签: powershell azure ssl virtual-machine

我想在用户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有关。

1 个答案:

答案 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