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

psexec exits with “<cmd> вышел на <target> с кодом ошибки 128 "</target></cmd>

У нас есть несколько серверов Windows 2003, на которых мы запускаем утилиты, psexec. Недавно на одном из них перестало работать. Для тех, кто не знаком с этим, вот как обычно работает этот процесс:

Псексек:

  1. копирует PSEXESVC.exe в \\target\admin$ (Обычно C: \ WINDOWS)
  2. устанавливает его как службу и запускает
  3. связывается со службой, чтобы служба запустила запрошенную программу
  4. ожидает ли служба статуса завершения процесса
  5. отображает статус выхода для пользователя
  6. останавливает и удаляет службу
  7. удаляет PSEXESVC.exe

Я проверил, что на пораженном сервере все происходит, за исключением того, что было на шаге 3. Независимо от того, какую программу я прошу запустить psexec (cmd, ping, ipconfig и т. Д.), Она выдает сообщение "команда вышел на цель с кодом ошибки 128. "

Это было несколько раз замечено на форумах sysinternals:

Некоторые утверждают, что вызванная команда возвращает ошибку, но я думаю, что это всего лишь артефакт того, как она пытается получить код выхода. net helpmsg 128 дает «Нет дочерних процессов, которых нужно ждать.», поэтому я думаю, что он не может дождаться дочернего процесса, потому что его нет.

Я проверил, что служба действительно запускается правильно, что разрешения для запрошенной программы идентичны между рабочими серверами и неработающим сервером, и что psexec работает, если работает с затронутого сервера как локальный (например, с psexec cmd вместо того psexec \\target cmd).

Единственное подтвержденное решение, которое я видел, - это перезагрузка машины. Хотя это производственный сервер, перезагрузка в течение дня возможна, поскольку его основная рабочая нагрузка - это пакетная обработка в ночное время. Однако я не решаюсь перезагружаться, так как мне бы очень хотелось определить причину проблемы с psexec, а прямо сейчас процесс psexec используется в целях разработки, поэтому задержка перезагрузки не влияет на производство.