Как я могу удаленно выполнить скрипт в Windows? - PullRequest
9 голосов
/ 14 мая 2009

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

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

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

Спасибо!

Ответы [ 5 ]

14 голосов
/ 14 мая 2009

psexec от SysInternals

6 голосов
/ 14 мая 2009

Изучите синтаксис команды 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.
3 голосов
/ 25 ноября 2013

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

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

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

1 голос
/ 23 мая 2013

Говоря о 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)

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


Совет

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

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

/usr/sbin/sshd -f /home/user/sshd_config
0 голосов
/ 14 мая 2009

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

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

У меня были некоторые ошибки, которые я изменилось в следующем коде. Использовать вырезать / вставить код в файл с именем Set-RemoteService.ps1. Убедись в установить выполнение политики скрипты ... это не будет по умолчанию. Вы сделать это с помощью set-executepolicy cmdlet. 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 = "Продолжить"} if ($ list) { foreach ($ srv in (список $ get-content)) { $ query = "Выбрать * из 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 ()}

...