Я собираюсь объединить все наши запланированные задачи, которые выполняются на различных серверах (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
командлеты уже включают возможность запуска в удаленном сеансе или на удаленном компьютере ...