Controlando serviços em outro computador

2

No momento, estou escrevendo um serviço para o Windows e estou freqüentemente atualizando e atualizando para o meu computador de teste. Eu gostaria de escrever um script que automaticamente pare o serviço, atualize o exe e reinicie o serviço. no entanto é que parar e iniciar parte que estou tendo problemas com.

O computador ao qual estou me conectando não está em um domínio e não compartilhamos um nome de usuário e senha. Eu acho que a minha melhor aposta é fazer sc.exe \testsvr stop "myService" no entanto, porque eu não tenho um domínio ou nomes de usuário compartilhados e senhas isso me dá uma mensagem "Acesso negado".

Eu posso facilmente adicionar o usuário, mas eu queria isso como uma experiência de aprendizado para quando eu não sou capaz de mudar os usuários.

    
por Scott Chamberlain 19.01.2010 / 23:14

5 respostas

3

Eu daria uma olhada no PsService do Sysinternals da Microsoft (sua parte da excelente ferramenta conjunto 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 é legal nesse script é que ele não depende das duas máquinas serem membros do mesmo domínio ou de ter qualquer outra confiança.

    
por 20.01.2010 / 00:59
6

Apenas para estar completo aqui, se você quiser fazer isso apenas com as ferramentas do Windows, primeiro estabeleça uma conexão IPC com a máquina remota (para estabelecer um token de segurança nessa máquina) e use 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 os serviços na máquina remota, independentemente da combinação de associação de grupo de trabalho / domínio de ambas as máquinas.

    
por 20.01.2010 / 16:42
1

Nunca tentei pessoalmente em uma configuração que não seja de 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"""

    
por 19.01.2010 / 23:51
0

Você pode querer olhar para o Powershell 2.0. Ele pode ter essa funcionalidade incorporada como uma espécie de RDP, portanto, você não precisaria de um domínio, mas ativaria a conexão e abriria algumas portas. Veja aqui para uma descrição leve e algumas palavras-chave que você pode usar no Google.

    
por 20.01.2010 / 03:50
0

Em um ambiente DOMAIN, você pode usar os comandos NET USE, assumindo que os direitos de usuário apropriados foram concedidos ao usuário que efetuou login e que executa o script. O PowerShell é provavelmente a opção mais poderosa que você tem, mas se estiver executando sistemas operacionais Microsoft mais antigos, talvez você tenha alguns problemas ao executar alguns comandos do PowerShell. Se tudo for o Windows 2008 ou mais recente, eu definitivamente usaria o PowerShell.

Se isso não for uma opção, obtive grande sucesso com o pacote PSTools. Se você optar por esta opção, como Evan mencionou anteriormente, provavelmente você deve se familiarizar com o utilitário pskill no mesmo pacote. Alguns serviços não morrem graciosamente quando você está mexendo com eles remotamente, e esse pequeno utilitário é ótimo para matá-los.

Por curiosidade, em que linguagem de script você está codificando isso? VBScript? BATCH? Perl?

    
por 20.01.2010 / 14:37