【问题标题】:Visual Studio Team Services - release definition - run task (PowerShell) as adminVisual Studio Team Services - 发布定义 - 以管理员身份运行任务 (PowerShell)
【发布时间】:2016-05-13 21:07:32
【问题描述】:

在 VSTS 中,我有一个发布定义,需要以管理员身份运行 PowerShell 脚本。

发布代理配置为以帐户身份运行,该帐户是本地管理员并具有所需权限,但 UAC 限制了这些权限,除非 PowerShell “以管理员身份”执行。

我可以在不完全禁用服务器上的 UAC 的情况下从 VSTS 以管理员身份运行 PS 吗?

【问题讨论】:

  • power-shell 脚本中的哪些操作需要管理员权限?我有一个 power-shell 脚本来添加和更新 HKLM 下的注册表。当代理使用管理员帐户运行时,它可以在我的构建代理上成功运行。
  • 我以 SPFarm 帐户运行脚本,它正在将 WSP 解决方案收回/部署到 SharePoint 场中。该脚本在以内置管理员身份执行时有效,但不适用于任何其他帐户,即使权限相同。我认为这是因为 UAC 对内置管理员帐户禁用,但对其他任何帐户都没有。

标签: powershell continuous-integration uac continuous-deployment azure-devops


【解决方案1】:

我认为没有办法使用 PS 任务来做到这一点。您可以尝试“在目标服务器上运行 PS”并提供管理员凭据。您需要提供代理的机器名称(因此这并不理想)作为任务的输入。那可能不需要UAC。我们会将其作为功能请求提交。

【讨论】:

  • “在目标服务器上运行 PS”并不理想。作为一种解决方法,我还考虑执行提升的任务,该任务必须在服务器上预先定义,但最终将代理重新配置为作为内置管理员运行,可以绕过 UAC。同样,不理想,因为我更喜欢使用另一个更受限制的帐户,所以是的 - 绝对是一个值得为 VSTS 的下一个版本构建的功能。
  • 你知道这是否曾经实现过?我正在寻找一项可以让我以管理员身份运行我的 power-shell 脚本的任务。任务“远程机器上的 Powershell”不适用于我的情况,因为我需要将内联脚本而不是文件路径。因为目标机器不包含该脚本。
【解决方案2】:

我遇到了同样的问题。为了修复它,我做了这个(YMMV):

  1. 我卸载了 Azure DevOps 代理
  2. 已验证代理用户是管理员
  3. 重新安装 Azure DevOps 代理

当我最初安装代理时,代理运行的用户不是管理员(我在安装代理后将该用户添加到 Builtin\Administrators 组)。我不确定这是否会导致问题,但卸载/重新安装解决了我的问题。

【讨论】:

    【解决方案3】:

    我认为内联或路径选项不是问题。也许在部署环境机器中安装代理,在安装过程中分配您确定在 SharePoint 场上具有管理权限的用户的凭据可以帮助您。然后在 VSTS 中验证代理是否在线并在部署组部分工作。

    【讨论】:

      【解决方案4】:

      我们通过创建一个轻量级的 .Netcore Worker 服务来解决无法使用提升的 Powershell 命令的问题,该服务具有在提升的服务特权状态下运行的 http 请求功能。您可以从常规 Powershell YML 任务发送 Invoke-RestMethod 命令,它会在 ASP 控制器的另一端触发您的自定义逻辑。在重新安装我们的单元测试之前,我们使用它来删除 Appx 包。仓库位于AzureAdmin

      【讨论】:

        猜你喜欢
        • 2016-08-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多