Adicionar nova dependência a um serviço do Windows que já possui dependências

Adicionar nova dependência a um serviço do Windows que já possui dependências

Quero adicionar via script em lote uma nova dependência de serviço a um serviço existente com dependências antigas, sem excluir essas dependências.

Eu sei que o comando sc config ServiceA depend= ServiceB/ServiceC/ServiceDpode adicionar múltiplas dependências, mas não sei como usá-lo para - por exemplo - adicionar dependência ServiceD a um serviço que depende de ServiceB e ServiceC, com o mesmo resultado e sem mencionar as dependências antigas (já que eu não os conheço).

Qual é a maneira de fazer isso? E - como reverter a alteração (também via Lote)?

A propósito, não tenho muita experiência com Batch.

Responder1

Descubra as dependências existentes, adicione a sua nova e escreva tudo de volta, digamos que você tenha um serviço chamado w3svc, você pode usar:

sc.exe  qc  w3svc

ou no PowerShell:

(get-service w3svc | Select ServicesDependedOn).ServicesDependedOn

onde você pode percorrer eles e criar um novo comando sc.exe para executar.

Exemplo:

 $serviceName = "w3svc"
 $cmd = "config $serviceName depend= "
 (gsv $serviceName | Select ServicesDependedOn).ServicesDependedOn | % {$cmd += $_.Name + "/"}
 $cmd += "myMasterService"
 invoke-expression "sc.exe $cmd"

Estamos construindo uma string de comando a partir dos serviços existentes e adicionando a sua própria.

Para remover o seu faça a mesma coisa, mas no circuito exclua o seu serviço.

 $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"

Não testei os comandos sc.exe reais, mas presumo que você saiba o que está fazendo.

informação relacionada