古い依存関係を削除することなく、既存のサービスにバッチ スクリプトを使用して新しいサービス依存関係を追加したいと考えています。
このコマンドsc config ServiceA depend= ServiceB/ServiceC/ServiceD
で複数の依存関係を追加できることはわかっていますが、たとえば、ServiceB と ServiceC に依存するサービスに ServiceD 依存関係を追加して、同じ結果を得て、古い依存関係について言及しないようにする方法がわかりません (古い依存関係がわからないため)。
それを実行する方法は何ですか? また、変更を元に戻す方法 (バッチ経由も) は何ですか?
ちなみに、私はバッチについてはあまり経験がありません。
答え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 コマンドをテストしたわけではありませんが、何をしているのかはご存じだと思います。