【问题标题】:TFS Integration Build Powershell With Elevated PrivilegesTFS 集成构建具有提升权限的 Powershell
【发布时间】:2016-06-05 08:16:35
【问题描述】:

我正在建立一个集成测试版本,我只是想启动一个 Windows 服务。

我已经使用 InvokeProcess 命令来运行仅执行以下操作的 powershell 脚本

启动服务ServiceName

当我运行构建过程时脚本失败,但是当我在 TFS 之外执行相同的脚本时它可以工作。我在 TFS 日志中收到以下错误

Start-Service:由于以下错误,无法启动服务“ServiceName (ServiceName)”:无法打开 ServiceName 计算机“。”上的服务。

然后我尝试更改启动服务的方式并在 InvokeProcess 中使用带有参数 "Start ServiceName" 的 SC.exe,我在 TFS 中收到 Access Denied 错误,如下所示:-

SC 启动服务名称。 [SC] 启动服务:OpenService 失败 5: 访问被拒绝。

我正在使用网络服务帐户来运行构建。

经过一段时间的搜索,我得出结论,我必须以提升的权限运行 InvokeProcess,但我不知道如何在 TFS 中执行此操作。

非常感谢任何帮助。

【问题讨论】:

  • 什么版本的 TFS?你在哪里调用 InvokeProcess 命令?
  • TFS 2013。我在编译和单元测试运行后添加了 InvokeProcess 命令。这些文件已部署到服务器,之后我尝试运行 Windows 服务。请注意,我不是在创建它始终存在的 Windows 服务。
  • 我还尝试使用以下命令记录执行 powershell 脚本的用户:- Write-Output "UserName" ([Environment]::UserName) Write-Output "User Domain Name" ([Environment] ::UserDomainName) 它将用户名打印为 MACHINENAME$,将用户域名打印为 AD 域,而不是本地或“.”。我已授予对 service.exe 所在文件夹上 LocalMachine/Network Service 帐户的访问权限。我不知道 DomainName/MachineName$ 和 ./Network Service 是同一个帐户还是不同。
  • 所以您正在编辑构建模板?
  • 是的,我已经自定义了默认构建模板

标签: powershell tfs


【解决方案1】:

我们将构建代理作为自定义服务帐户运行,并在我们部署到的服务器上授予该域帐户管理员访问权限。

【讨论】:

    【解决方案2】:

    我已通过将网络服务帐户添加到管理员组来解决此问题。我可能不会采用此解决方案,因为将管理权限分配给网络服务帐户似乎是错误的,但我不知道如何在不将此帐户添加到管理员组的情况下将服务启动/停止权限分配给网络服务。

    简而言之,我同意必须使用自定义服务帐户才能以适当的权限运行构建的答案。

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 2016-01-17
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多