Azure DevOps On-Premise - 如何停止和删除远程计算机上的 windows 服务?

Azure DevOps On-Premise - How can I stop and delete a windows service on a remote machine?

我在远程机器上已有 Windows 服务。

这是我需要做的:

  1. 停止该服务。
  2. 删除该服务。
  3. 将我的构建工件复制到该远程计算机上的指定目录。
  4. 重新创建 Windows 服务。
  5. 启动 Windows 服务。

我的问题:


有几种方法可以实现这一点,但我将介绍一种我推荐使用 PowerShell 的方法:

  1. 在您的部署任务中,添加“运行 PowerShell”任务;
  2. Select 内联脚本并粘贴以下代码:

    Get-Service -DisplayName "YOUR_SERVICE_NAME" | Stop-Service
    
  3. 将工件文件复制到目标文件夹(就像您所做的那样);
  4. 重复第 1 步并粘贴以下代码以重新创建并启动服务:

    $params = @{
      Name = "YOUR_SERVICE_NAME"
      BinaryPathName = "C:\WINDOWS\System32\svchost.exe -k netsvcs"
      DependsOn = "NetLogon"
      DisplayName = "Test Service"
      StartupType = "Manual"
      Description = "This is a test service."
    }
    New-Service @params
    

您可以在 Microsoft Docs:

阅读更多关于服务创建参数的信息

首先,

sc STOP $(serviceName)

应该是红旗。

@Daniel Mann 问:

Does the service account that your agent is running under have appropriate permissions [to do this]?

但也应该问:

Which machine are you looking to execute this against? The build agent?

事实上,这是我的问题。当我第一次测试这个发布管道时,目标机器和构建代理恰好是同一台机器

这是一次不幸的事故,因为并非所有版本都是如此。


解法:

这是正确的:

sc \$(serviceMachine) STOP $(serviceName)

并且 @Daniel Mann 是正确的:

  • 下构建代理 运行 的服务帐户必须具有执行此操作的适当权限。