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 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.