Назад | Перейти на главную страницу

Как использовать планировщик задач Windows для запуска исполняемого файла на удаленном сервере?

Я собираюсь объединить все наши запланированные задачи, которые выполняются на различных серверах (Win 2008 R2) в нашем домене, на одном «сервере планирования задач». Я разработчик, поэтому даже не уверен, хорошая ли это идея или просто головная боль обслуживания. Один из наших сетевых специалистов скопировал некоторые задачи, которые я отслеживаю, на новый сервер и попросил меня протестировать их.

Основная проблема, по-видимому, заключается в том, чтобы заставить приложение, которое задача пытается запустить, запускаться на удаленном сервере, а не на сервере, на котором запланирована задача. Ошибки, которые я вижу, связаны с тем, что ссылка на dll не найдена. Когда я проверяю сборку, dll существует на удаленном сервере, но не на сервере планирования. Это заставляет меня думать, что даже если у меня заполнено поле «Начать в», на самом деле он не начинается в этом месте.

Мои настройки в диалоговом окне редактирования действий в этом случае следующие:

Program/Script: \\server1\c$\some\long\path\myExe.exe
Add arguments (optional): arg1 arg2
Start in (optional):  \\server1\c$\some\long\path

Другой пример, который у меня есть, - с пакетным файлом, и даже с установленным значением «Start In», если у меня есть относительные пути в скрипте, пути не найдены. Если я изменю пути на абсолютные, все заработает. Например, в командном файле -

dir .\update /b /on >> ..\logs\logdir.txt

получает ошибку неверного пути, где как

dir \\server1\c$\my\path\update /b /on >> \\server1\c$\my\logs\logdir.txt

работает.

Итак, мой технический вопрос: как запустить exe (и командный файл) на удаленном сервере? И мой вопрос сетевого администратора: это хороший способ управлять запланированными задачами или лучше располагать расписания на том же сервере, что и тот, который выполняет обработку?

Один из способов добиться этого - использовать psexec как это:

psexec /accepteula yourserver.yourdomain CommandToExecuteRemotely

Альтернативой может быть включение PS Удаленное взаимодействие на удаленном сервере ваша запланированная задача может иметь вид

powershell -command "Invoke-Command -ComputerName yourserver.yourdomain  
    -FilePath ""C:\LocalScriptToExecuteRemotely.ps1"""

или

powershell -command "Invoke-Command -ComputerName yourserver.yourdomain  
    -Scriptblock { ScriptblockToExecuteRemotely }"

Больше альтернатив с Powershell можно найти в этом глава об удаленном взаимодействии, например с помощью Invoke-RemoteExpression без включения удаленного доступа PS.

Не забудьте использовать escape-символ в стиле Windows CLI (каретка: ^) или escape-символ в стиле Powershell (обратная кавычка: `), где это применимо.

Также помните о любых необходимых разрешениях на удаленном компьютере - оба представленных решения имеют параметры для передачи учетных данных.


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

Приведенные выше решения могут оказаться полезными, если вы намереваетесь затем удаленно управлять запланированными задачами используя, например, schtasks в ваших командах / скриптовых блоках:]
Обратите внимание, что Powershell *-ScheduledTask командлеты уже включают возможность запуска в удаленном сеансе или на удаленном компьютере ...