Atualmente, estou escrevendo um serviço para Windows e frequentemente o ajusto e atualizo em meu computador de teste. Gostaria de escrever um script que interrompa automaticamente o serviço, atualize o exe e reinicie o serviço. no entanto, é com essa parte de parar e iniciar que estou tendo problemas.
O computador ao qual estou me conectando não está em um domínio e não compartilhamos nome de usuário e senha. Acho que minha melhor aposta é fazer sc.exe \\testsvr stop "myService"
isso, porque não tenho um domínio ou nomes de usuário e senhas compartilhados, isso me dá uma mensagem "Acesso negado".
Posso facilmente adicionar o usuário, mas queria isso como uma experiência de aprendizado para quando não for possível alterar os usuários.
Responder1
eu daria uma olhadaPsServicedo Sysinternals da Microsoft (faz parte do excelente conjunto de ferramentas escrito por Mark Russinovich).
Direto do site:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
Para <command>
, você pode usar start
, stop
ou restart
como as opções mais comuns. O que é interessante nesse script é que ele não depende de as duas máquinas serem membros do mesmo domínio ou terem qualquer outra confiança.
Responder2
Apenas para completar aqui, se você quiser fazer isso apenas com ferramentas padrão do Windows, você pode primeiro estabelecer uma conexão IPC com a máquina remota (para estabelecer um token de segurança nessa máquina) e então usar o comando "SC":
net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete
Isso permitirá que você controle serviços na máquina remota, independentemente da combinação de associação de grupo de trabalho/domínio de ambas as máquinas.
Responder3
Nunca tentei pessoalmente em uma configuração sem domínio, mas talvez execute SC.exe com "RunAs" e use credenciais para o computador de destino?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
Responder4
Em um ambiente DOMAIN, você pode usar os comandos NET USE, presumindo que os direitos de usuário adequados tenham sido concedidos ao usuário conectado que executa o script. O PowerShell é provavelmente a opção mais poderosa que você tem, mas se estiver executando sistemas operacionais Microsoft mais antigos, você poderá ter alguns problemas ao executar alguns comandos do PowerShell. Se tudo for Windows 2008 ou mais recente, eu definitivamente escolheria o PowerShell.
Se isso não for uma opção, tive grande sucesso com o pacote PSTools. Se você optar por esta opção, como Evan mencionou anteriormente, provavelmente deverá se familiarizar com o utilitário pskill no mesmo pacote. Alguns serviços não morrem normalmente quando você os usa remotamente, e esse pequeno utilitário é ÓTIMO para eliminá-los.
Por curiosidade, em que linguagem de script você está codificando isso? VBScript? Lote? Perl?