Вопрос или проблема
Я хотел бы запустить программу (пакетный файл с бесконечным циклом внутри) на удаленном хосте с помощью PSEXec и продолжить выполнение после этого. Моя проблема в том, что когда я запускаю команду, подобную:
psexec -d -u user -p password \\192.168.42.42 "D:\myscript.bat", вызывающее окно команд остается открытым, но не возвращает, потому что d:\mysscript.bat содержит цикл, который заставляет процесс выполняться бесконечно (намеренно).
Что я хотел бы добиться, так это поведение, при котором я могу запустить процесс удаленно, который будет продолжать работать на удаленной системе, но выполнение в вызывающем окне команд продолжается (т.е. psexec возвращает, хотя удаленный процесс все еще выполняется).
Как я могу добиться желаемого поведения с помощью psexec? На данный момент процесс на стороне вызова ждет окончания удаленного процесса, но не возвращает.
Возможно, просто используйте вложенные пакетные файлы и используйте psexec для вызова локального пакетного файла на удаленной машине? https://jpsoft.com/help/call.htm
.
Ответ или решение
Запуск пакетного файла на удаленном компьютере с использованием PSExec без ожидания завершения процесса
Вопрос, который вы подняли, касается выполнения длительных задач с помощью утилиты PSExec, которая является мощным средством для удаленного управления и выполнения команд. Для реализации вашего сценария, в котором требуется запуск пакетного файла с бесконечным циклом на удаленной машине, при этом продолжая выполнение в оригинальном окне командной строки, необходимо выполнить некоторые шаги.
Шаги для успешного выполнения задачи
-
Использование параметра
-d
Основной параметр, который вы уже использовали, это-d
. Этот параметр указывает PSExec не ждать завершения удаленной программы. Тем не менее, наличие бесконечного цикла в вашем пакетном файле может создать конечное поведение, когда процесс запускается, но не завершается так, как вы могли ожидать.Например, ваша команда выглядит следующим образом:
psexec -d -u user -p password \\192.168.42.42 "D:\myscript.bat"
Этот вызов корректно инициирует выполнение
myscript.bat
, но данная команда может блокироваться из-за особенностей работы с бесконечным циклом. -
Запуск через дополнительный скрипт
Чтобы убедиться, что основной оконный процесс завершен, вы можете создать отдельный, минималистичный пакетный файл, который будет отвечать за запуск вашего оригинального скрипта. Например, создайте новый пакетный файлrun.bat
, который только запускает ваш основной скрипт, и используйте его для выполнения команды psexec:@echo off start "" "D:\myscript.bat"
Теперь инициируйте его выполнение вместо прямого запуска вашего
myscript.bat
:psexec -d -u user -p password \\192.168.42.42 "D:\run.bat"
Ключевое тут заключается в использовании команды
start
, которая запускает новый процесс дляmyscript.bat
, тем самым позволяя вашемуrun.bat
завершиться и освободить обе окна скорости командного запроса. -
Проверка наличия прав на удаленный доступ
Убедитесь, что у вас есть все необходимые права для удаленного выполнения скриптов. Проверяйте настройки брандмауэра и настройки UAC (Контроль учетных записей пользователей), так как они могут блокировать выполнение кодов.
Заключение
Следуя вышеуказанным шагам, вы сможете запустить длительные процессы на удаленной машине с помощью PSExec эффективным и надежным образом без необходимости ожидания их завершения. Используйте возможность создания вспомогательных скриптов для упрощения управления процессами, что сделает вашу работу более гибкой и менее зависимой от долгих ожиданий. Если у вас возникли дополнительные вопросы по работе с PSExec или удаленному управлению системами, не стесняйтесь обращаться за разъяснениями.