Как я могу удаленно выполнить скрипт в Windows?

Я хотел бы, чтобы сервер Windows 2003 запускал сценарий для запуска другого сценария на отдельном компьютере с Windows Server 2008.

Мне сказали, что Powershell может это сделать, и это нормально, но мне нужны более конкретные детали.

У кого-нибудь есть советы по этому поводу?

Спасибо!

5 ответов

Решение

psexec от SysInternals

Посмотрите на синтаксис для команды AT. Вы можете использовать его, чтобы запланировать запуск процесса на удаленной машине.

Команда AT планирует команды и программы для запуска на компьютере в указанное время и дату. Служба расписания должна быть запущена, чтобы использовать команду 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.

Самый простой способ использования будет в два этапа

а. установка cygwin на удаленный компьютер

б. запустите ssh hudson@mcs '/cygdrive/c/path_to_script.bat'

Говоря о PsExecЯ настоятельно рекомендую использовать Cygwin/OpenSSH.

SSH имеет несколько преимуществ (по сравнению с такими инструментами, как PsExec или даже заказные услуги).
Например, попробуйте использовать с PsExec и реализовать то, что эти bash / ssh командные строки делают:

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

Удачи!

  • SSH передает (!) Удаленный статус stdout / stderr / exit в локальную оболочку для проверки
    (функция убийцы и общее требование для интеграции удаленного выполнения в логику локальных сценариев)

  • Cygwin/OpenSSH предоставляет стандартную среду оболочки POSIX
    (эффективные затраты времени, фундаментальные инструменты, кроссплатформенность, совместимые привычки и т. д.)

  • Вы все еще можете / всегда запускать все родные приложения Windows
    (включая автоматическое выполнение *.bat файлы по cmd процессор)

  • Вы можете настроить аутентификацию без пароля, используя открытые ключи
    (подумайте об автоматических задачах без присмотра)


Совет

Было одно требование, с которым у меня изначально были проблемы:
фон sshd сервис должен был выполнять приложения в графическом сеансе пользователя
(чтобы окно приложения появилось в среде рабочего стола).

Приемлемое решение для меня было запущено sshd сервис непосредственно в сеансе пользователя GUI
(запускается автоматически при входе пользователя, перейдите по ссылке, чтобы увидеть изменения в файле конфигурации):

/usr/sbin/sshd -f /home/user/sshd_config

Принятое решение от http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Q_22959948.html:

Я предоставил скрипт, который принимает параметры... В данном случае это 4. 4. Сервер: если вы передадите -server, он будет выполнять только один сервер. 2) Список: вы можете предоставить список серверов. 3) Сервис: название сервиса, который вы хотите изменить. 4) Подробный: здесь не используется.

У меня были некоторые ошибки, которые я изменил в следующем коде. Чтобы использовать вырезать / вставить код в файл с именем Set-RemoteService.ps1. Убедитесь, что вы установили свою политику исполнения для запуска скриптов... по умолчанию это не так. Это можно сделать с помощью командлета set-executepolicy. PS> Set-Executionpolicy "RemoteSigned" для запуска выполняемого вами сценария PS> C: \ PathToScript \ Set-RemoteService.ps1 -list c: \ ServerList.txt -service "DHCP"

######################### Param ($ server, $ list, $ service, [switch] $ verbose)

if ($ Verbose) {$ VerbosePreference = "Continue"} if ($ list) {foreach ($ srv in (get-content $ list)) {$ query = "Select * from Win32_Service, где Name='$service'" $myService = get-WmiObject -query $query -computer $srv $myService.ChangeStartMode("Automatic") $myService.Start() } } if($server) { $query = "Выбрать * из Win32_Service, где Name='$service'" $myService = get-WmiObject -query $query -computer $server $myService.ChangeStartMode("Automatic") $myService.Start() }

Другие вопросы по тегам