Как я могу удаленно выполнить скрипт в Windows?
Я хотел бы, чтобы сервер Windows 2003 запускал сценарий для запуска другого сценария на отдельном компьютере с Windows Server 2008.
Мне сказали, что Powershell может это сделать, и это нормально, но мне нужны более конкретные детали.
У кого-нибудь есть советы по этому поводу?
Спасибо!
5 ответов
Посмотрите на синтаксис для команды 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() }