Como posso remotamente executar um script no Windows?
-
21-08-2019 - |
Pergunta
Eu gostaria de ter um incêndio servidor Windows 2003 um script para disparar outro script em um computador separado do Windows Server 2008.
Foi-me dito que PowerShell pode fazer isso, e isso é bom, mas eu preciso de detalhes mais específicos.
Alguém tem alguma dica para isso?
Obrigado!
Solução
psexec da SysInternals
Outras dicas
Olhe para a sintaxe do comando AT. Você pode usá-lo para agendar um processo para rodar em uma máquina remota.
O comando AT agenda comandos e programas para rodar em um computador em uma hora e data especificadas. O serviço de agendamento deve ser executado para usar o comando AT.
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername Specifies a remote computer. Commands are scheduled on the
local computer if this parameter is omitted.
id Is an identification number assigned to a scheduled
command.
/delete Cancels a scheduled command. If id is omitted, all the
scheduled commands on the computer are canceled.
/yes Used with cancel all jobs command when no further
confirmation is desired.
time Specifies the time when command is to run.
/interactive Allows the job to interact with the desktop of the user
who is logged on at the time the job runs.
/every:date[,...] Runs the command on each specified day(s) of the week or
month. If date is omitted, the current day of the month
is assumed.
/next:date[,...] Runs the specified command on the next occurrence of the
day (for example, next Thursday). If date is omitted, the
current day of the month is assumed.
"command" Is the Windows NT command, or batch program to be run.
maneira mais fácil que é utilização será em duas etapas
a. instalar o cygwin para PC remoto
b. executar hudson ssh @ mcs '/cygdrive/c/path_to_script.bat'
Falando sobre PsExec
, eu fortemente sugiro usar Cygwin / OpenSSH vez.
SSH tem várias vantagens (mais ferramentas como PsExec
ou serviços, mesmo sob medida).
Por exemplo, tente usar com PsExec
e implementar o que estas linhas de comando bash
/ ssh
fazer:
ssh user@remotehost "find . -name something" 2> all.errors.txt
ssh user@remotehost "grep -r something ."
if [ "$?" == "0" ]
then
echo "FOUND"
else
echo "NOT FOUND"
fi
Boa sorte!
-
transferências SSH (!) remota stdout / stderr / status de saída para Local shell de inspeção
(Característica do assassino e exigência comum para integrar a execução remota na lógica de scripts locais) -
Cygwin / OpenSSH fornece padrão POSIX shell ambiente
(Investimento de tempo eficiente, ferramentas fundamentais, cross-platform prontos, hábitos compatíveis, etc.) -
Você pode ainda / sempre correr todos nativos aplicativo do Windows
(Incluindo a execução automática de arquivos*.bat
pelo processadorcmd
) -
Você pode configurar autenticação sem senha usando chaves públicas
(Pense em tarefas automatizadas autônoma)
Dica
Houve uma exigência tive problemas com inicialmente:
serviço de fundo sshd
tinha para executar aplicativos em sessão gráfica do usuário
(Na janela de aplicação make aparecem no ambiente de trabalho).
O solução aceitável para mim estava correndo serviço sshd
diretamente na GUI do usuário sessão
(Iniciar automaticamente quando o usuário fizer login, siga o link para ver as alterações no arquivo de configuração):
/usr/sbin/sshd -f /home/user/sshd_config
A solução aceita de http://www.experts-exchange.com /OS/Microsoft_Operating_Systems/Q_22959948.html é:
O que eu fornecer foi um script que leva parâmetros ... Neste caso é preciso 4. 1) Server: se você passar -server ele vai só fazem que um servidor 2) Lista: Você pode fornecer um arquivo de lista de servidores. 3) Serviço: Nome do serviço que deseja modificar 4) Verbose: não é utilizado aqui.
Eu tive alguns erros que eu alterado no código a seguir. Usar cortar / colar o código em um arquivo chamado Set-RemoteService.ps1. Tenha certeza de definir o seu executionpolicy para executar scripts de ... ele não vai por padrão. Vocês fazer isso usando a cmdlet set-executionpolicy. PS> Set-ExecutionPolicy "RemoteSigned" para executar o script que você faz PS> C: \ PathToScript \ Set-RemoteService.ps1 -list c: \ ServerList.txt -serviço "DHCP"
######################### Param ($ server, $ list, $ service, [chave] $ detalhado)if ($ verboso) {$ VerbosePreference = "Continuar"} if ($ list) { foreach ($ SRV no (get-content $ lista)) { $ Query = "Select * from Win32_Service onde Name = '$ service'" $ MyService = get-WmiObject -query $ query -computer $ srv $ MyService.ChangeStartMode ( "Automatic") $ MyService.Start () }} If ($ servidor) { $ Query = "Select * from Win32_Service onde Name = '$ service'" $ MyService = get-WmiObject -query $ query -computer $ server $ MyService.ChangeStartMode ( "Automatic") $ MyService.Start ()}