【问题标题】:CustomScriptExtension cannot run Start-Process (Access is denied)CustomScriptExtension 无法运行 Start-Process(访问被拒绝)
【发布时间】:2017-01-09 14:51:08
【问题描述】:

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

【问题讨论】:

    标签: powershell azure ssl virtual-machine


    【解决方案1】:

    出于安全原因,不允许 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
    

    【讨论】:

    • 第一次运行时不要忘记/accepteula参数。
    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2019-09-29
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多