Azure DevOps On-Premise - 如何停止和删除远程计算机上的 windows 服务?
Azure DevOps On-Premise - How can I stop and delete a windows service on a remote machine?
我在远程机器上已有 Windows 服务。
这是我需要做的:
- 停止该服务。
- 删除该服务。
- 将我的构建工件复制到该远程计算机上的指定目录。
- 重新创建 Windows 服务。
- 启动 Windows 服务。
我的问题:
- 我的构建代理既不能停止也不能删除现有的 Windows 服务。
我不断收到以下错误:
[SC] OpenSCManager 失败 5:
访问被拒绝。
有几种方法可以实现这一点,但我将介绍一种我推荐使用 PowerShell 的方法:
- 在您的部署任务中,添加“运行 PowerShell”任务;
Select 内联脚本并粘贴以下代码:
Get-Service -DisplayName "YOUR_SERVICE_NAME" | Stop-Service
- 将工件文件复制到目标文件夹(就像您所做的那样);
重复第 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 是正确的:
- 在 下构建代理 运行 的服务帐户必须具有执行此操作的适当权限。
我在远程机器上已有 Windows 服务。
这是我需要做的:
- 停止该服务。
- 删除该服务。
- 将我的构建工件复制到该远程计算机上的指定目录。
- 重新创建 Windows 服务。
- 启动 Windows 服务。
我的问题:
- 我的构建代理既不能停止也不能删除现有的 Windows 服务。
我不断收到以下错误:
[SC] OpenSCManager 失败 5:
访问被拒绝。
有几种方法可以实现这一点,但我将介绍一种我推荐使用 PowerShell 的方法:
- 在您的部署任务中,添加“运行 PowerShell”任务;
Select 内联脚本并粘贴以下代码:
Get-Service -DisplayName "YOUR_SERVICE_NAME" | Stop-Service
- 将工件文件复制到目标文件夹(就像您所做的那样);
重复第 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 是正确的:
- 在 下构建代理 运行 的服务帐户必须具有执行此操作的适当权限。