Quiero agregar mediante un script por lotes una nueva dependencia de servicio a un servicio existente con dependencias antiguas, sin eliminar estas dependencias.
Sé que el comando sc config ServiceA depend= ServiceB/ServiceC/ServiceD
puede agregar múltiples dependencias, pero no sé cómo usarlo para, por ejemplo, agregar la dependencia ServiceD a un servicio que depende de ServiceB y ServiceC, con el mismo resultado y sin mencionar las dependencias antiguas (ya que no los conozco).
¿Cuál es la manera de hacer eso? Y, ¿cómo revertir el cambio (también mediante lotes)?
Por cierto, no tengo mucha experiencia con Batch.
Respuesta1
Descubra las dependencias existentes, agregue una nueva y vuelva a escribir todo, digamos que tiene un servicio llamado w3svc
, puede usar:
sc.exe qc w3svc
o en PowerShell:
(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn
donde puede recorrerlos y crear un nuevo comando sc.exe para ejecutar.
Ejemplo:
$serviceName = "w3svc"
$cmd = "config $serviceName depend= "
(gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {$cmd += $_.Name + "/"}
$cmd += "myMasterService"
invoke-expression "sc.exe $cmd"
Estamos creando una cadena de comando a partir de los servicios existentes y agregamos la suya propia.
Para eliminar el tuyo, haz lo mismo, pero en el bucle excluye tu servicio.
$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"
No he probado los comandos sc.exe reales, pero supongo que sabes lo que estás haciendo.