我想透過批次腳本向具有舊依賴項的現有服務添加新的服務依賴項,而不刪除這些依賴項。
我知道該命令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 命令,但我假設您知道自己在做什麼。