2015-07-11 4 views
2

У меня есть сценарий, в котором этот код не удается, с выходным кодом -2145124322Загрязненная трубопровода и устранение неисправностей

$new.ExitCode > $null 
$filePath = "wusa.exe" 
$argumentList = "`"\\PX_SERVER\Rollouts\Microsoft\VirtualPC\Windows6.1-KB958559-x64-RefreshPkg.msu`" /quiet /norestart" 
$exitCode = (Start-Process -FilePath:$filePath -argumentList:$argumentList -wait -errorAction:Stop -PassThru).ExitCode 
Write-Host $exitCode 

Теперь основной сценарий имеет около 15000 строк «другие вещи происходит», и эти линии, где первоначально не так точно. Переменные вытягиваются из XML, есть проверка данных и блоки try/catch, всевозможные вещи. Итак, я начал вытаскивать соответствующие строки и помещал их в маленький отдельный скрипт и жестко закодировал переменные. И там, это работает, я получаю хороший код выхода 3010 и выхожу на гонки. Итак, я взял свой рабочий код, жестко закодированные переменные и все, и вставил его обратно в исходный скрипт, и он снова ломается. Итак, я переместил код из функции, где он принадлежит, и просто положил его после инициализации всего и до того, как я начал работать через основной цикл. И там это работает! Теперь я считаю, что это обычный «загрязненный трубопровод», но, если я смогу понять, что может это сделать. Мой следующий шаг, я думаю, это просто начать шаг за кодом, отбросив этот самородок где-то, запустите тест, если он работает, переместите его дальше, повторите попытку. Gack! Итак, прыгая кто-то имеет некоторые идеи. Или то, что может быть, или, возможно, улучшенный протокол тестирования. Или какой-то трюк, чтобы увидеть весь трубопровод и как-то признать загрязнение.

FWIW, я обычно работаю с PoSH v2, но я пробовал это с v4 с точно такими же результатами. Но, возможно, есть некоторая функция мониторинга трубопровода в более поздней версии, которая может помочь в устранении неполадок?

Кроме того, я понимаю, что PoSH v2 имеет проблемы с отрицательными кодами возврата, поэтому им нельзя доверять. Но я думаю, что новые версии исправили это, правильно? Итак, тот факт, что я получаю один и тот же код в v4, означает, что он имеет смысл для Google? Не то, чтобы я до сих пор нашел какой-либо намек на этот код выхода.

Скрещенные пальцы.

EDIT: ОК, немного больше данных. Я искал код выхода без ... и с DuckDuckGo вместо Google, и нашел это. 0x8024001E -2145124322 Операция WU_E_SERVICE_STOP не завершена, так как служба или система были отключены. OK, это в определенном направлении. И у меня есть код, который позволит мне временно убить службу. Но это кажется немного драконовским. Разве это не все, как 10-й способ установить обновления от Microsoft, которые должны были упростить автоматизацию? В любом случае, я не могу найти никаких признаков наличия флагов командной строки для WUSA, которые могли бы избежать проблемы, но я должен полагать, что я делаю что-то неправильно.

ответ

1

Решенный! После отслеживания нескольких различных ошибок, связанных с разными вещами, включая выключение брандмауэра и т. Д., Оказывается, что ошибка не в том, что служба не остановится, а что служба не запустится. См., Некоторые из этих 15K строк кода подавляют обновление Windows в течение всего срока действия моего сценария, поскольку Windows Update приводит к сбою множества развертываний Autodesk, что является целым для моего кода. Ну, конечно, WUSA нуждается в этом сервисе. Таким образом, похоже, вместо того, чтобы подавлять Windows Update на время выполнения скрипта, мне нужно быть менее тяжелой и подавлять только на время задачи развертывания. для выполнения и тестирования потребуется несколько часов, но это вполне выполнимо. И, наверное, еще более элегантно. Woot!

И да, на этот раз я не случайно боролся со своим конвейером. ;)

Смежные вопросы