Ошибка Powershell, когда внешние команды молча терпят неудачу - PullRequest
3 голосов
/ 29 мая 2011

У меня есть сложный скрипт powershell, который использует удаленное взаимодействие и выполняет множество операций копирования, загрузки и выгрузки модулей powershell. В скрипте я использую robocopy для перемещения только файлов изменений, и все работает нормально.

Однако время от времени сеанс powershell переходит в странное состояние, в результате которого он больше не выполняет внешние команды. Например, если я ввожу robocopy в консоль, он сразу же возвращается без ошибок и без вывода. Если я наберу whoami, он снова немедленно вернется без вывода. В это состояние попадает только 1 из 10 выполнений одного и того же скрипта.

Если я закрою консоль и начну новый сеанс, все вернется в нормальное состояние. Есть идеи, что здесь происходит? Я не могу найти способ отладки или исправления этого состояния.

Спасибо, Mike

Обновление Похоже, существует известная проблема с передачей массивов в write-host, которая может вызвать такое поведение. Я не верю, что я делаю это, но это трудно знать наверняка. Мне удалось поставить ловушку на место тестирования, когда результат whoami становится пустым. Как ни странно, это происходит во время ожидания длительной удаленной операции.

Ответы [ 3 ]

1 голос
/ 01 июля 2011

К сожалению, у меня нет ответа для вас, но я также видел это точное поведение, и я могу добавить некоторое понимание; Я точно знаю, что я не использую write-host, и эта проблема возникает только тогда, когда я использую фоновые задания powershell V2 и удаленное взаимодействие. Обычно это происходит после того, как я запустил довольно большое количество фоновых заданий, и, как и вы, проблема связана с этим единственным процессом PowerShell. Перезапуск PowerShell всегда решает проблему.

0 голосов
/ 20 марта 2012

Если вы используете параметр / R с командой robocopy, попробуйте увеличить количество повторных попыток. Лучше использовать значение по умолчанию. Надеюсь, это хорошо работает.

-Archit

0 голосов
/ 16 сентября 2011

Для всех, кто может столкнуться с этим - проверьте все строки, у которых есть write-host - в моем случае виновником была эта строка в скрипте:

Write-Host **************************************

В конце он использовался в качестве визуального маркера, что все циклы завершены, и под ним была сводка ... Как только я удалил ее, команды будут выполнены.Если я добавлю его, они перестают выполняться ... Может быть, звездочки переполняют какой-то буфер?Не уверен, но я никогда не буду использовать их снова ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...