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

2

Eu 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/ServiceD pode adicionar várias dependências, mas não sei como usá-lo para - por exemplo - adicionar a dependência do ServiceD a um serviço que depende do ServiceB e ServiceC, com o mesmo resultado e sem mencionar as dependências antigas (já que não as conheço).

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

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

    
por Reflection 27.02.2015 / 22:38

1 resposta

2

Descubra as dependências existentes, adicione 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 percorrê-los 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 criando 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 loop exclua 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"

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

    
por 28.02.2015 / 10:24