Я собираюсь объединить все наши запланированные задачи, которые выполняются на разных серверах (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
Другой пример, который у меня есть, - с пакетным файлом, и даже с установленным значением «Начать с», если у меня есть относительные пути в скрипте, пути не найдены. Если я изменю пути на абсолютные, все заработает. Например, в пакетном файле -
каталог \ update / b / on >> .. \ logs \ logdir.txt
получает ошибку неверного пути, тогда как
dir \\server1\c$\my\path\update /b /on >> \\server1\c$\my\logs\logdir.txt
работает.
Итак, мой технический вопрос - как заставить исполняемый файл (и командный файл) запускаться на удаленном сервере? И мой вопрос сетевого администратора: это хороший способ управлять запланированными задачами или лучше располагать расписания на том же сервере, что и тот, который выполняет обработку?
Один из способов добиться этого - использовать psexec следующим образом:
psexec /accepteula yourserver.yourdomain CommandToExecuteRemotely
Альтернативой может быть включение PS Remoting на удаленном сервере , тогда ваша запланированная задача может иметь форму
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
уже включают возможность запуска в удаленном сеансе или на удаленном компьютере…