我想通过批处理脚本向具有旧依赖项的现有服务添加新的服务依赖项,而不删除这些依赖项。
我知道该命令sc config ServiceA depend= ServiceB/ServiceC/ServiceD
可以添加多个依赖项,但我不知道如何使用它 - 例如 - 将 ServiceD 依赖项添加到依赖于 ServiceB 和 ServiceC 的服务,获得相同的结果并且不提及旧的依赖项(因为我不知道它们)。
有什么办法可以做到这一点?以及如何恢复更改(也可以通过批处理)?
顺便说一句,我对 Batch 没有太多经验。
答案1
找出现有的依赖项,添加新的依赖项并将整个内容写回,假设您有一个名为的服务w3svc
,您可以使用:
sc.exe qc w3svc
或者在 PowerShell 中:
(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn
您可以循环遍历这些命令并构建一个新的 sc.exe 命令来执行。
例子:
$serviceName = "w3svc"
$cmd = "config $serviceName depend= "
(gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {$cmd += $_.Name + "/"}
$cmd += "myMasterService"
invoke-expression "sc.exe $cmd"
我们正在从现有服务构建命令字符串并添加您自己的服务。
要删除您的服务,请执行相同的操作,但在循环中排除您的服务。
$serviceName = "w3svc"
$cmd = "config $serviceName depend= "
(gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {
if ($_.Name -ne "myMasterService")
{
$cmd += $_.Name + "/"
}
}
# remove the last slash
$cmd = $cmd -replace "/$", ""
invoke-expression "sc.exe $cmd"
我还没有测试实际的 sc.exe 命令,但我认为你知道自己在做什么。