Powershell возвращает код завершения 0 или 1 в последовательности задач MDT - PullRequest
0 голосов
/ 13 февраля 2020

Мне кажется, я ломаю голову над чем-то очень простым. Я работал над этим два дня и, к сожалению, не могу понять.

Проблема в том, что я использую скрипт Powershell при развертывании системы Windows с MDT. Сценарий называется последним в последовательности задач. В сценарии я запрашиваю задачу перезагрузки и повторной попытки, поскольку приложение (инструмент обновления Dell) нуждается в перезагрузке.

Эта часть работает, так как в MDT TS она понимает, что должна перезагрузиться, а также должна перезапустить задача. Машина перезагружается, а затем повторно запускает ту же последовательность задач, но сценарий никогда не запускается, в то время как SMSTS.log действительно сообщает, что он был успешно запущен и завершился с кодом 0.

Затем я заметил, что код выхода всегда 0 пока я меняю это в своем скрипте. Затем я обнаружил, что это неправильно с кодом возврата моего скрипта powershell, и попробовал следующее:

Тестовый скрипт:

$MyExitCode = 3010
Write-Host ('MyExitcode: [' + $MyExitCode + ']')
Write-Host ('LastExitCode: [' + $LastExitCode + ']')
Write-Host ''
Write-Host 'Setting MyExitCode to LastExitCode'
$LastExitCode = $MyExitCode
Write-Host 'New Result:'
Write-Host ('MyExitcode: [' + $MyExitCode + ']')
Write-Host ('LastExitCode: [' + $LastExitCode + ']')
Read-Host 'Debug Break' 
Write-Output $_
Exit $ExitCode

Откройте CMD как администратор и затем выполните следующую команду

CMD> powershell.exe -ExecutionPolicy bypass -File "Z:\Applications\Test\TestRerunTask.ps1"
CMD> echo $LastExitCode
CMD> 0

Замена параметра -File на -Command изменила код выхода на 1, но в SMSTS.log по-прежнему говорится, что он завершен с кодом 0

Фрагмент SMSTS.log the Последовательность задач называется Test

!--------------------------------------------------------------------------------------------!  TSManager   13-2-2020 11:18:41  6200 (0x1838)
Expand a string: WinPEandFullOS                                                                 TSManager   13-2-2020 11:18:41  6200 (0x1838)
Executing command line: cscript.exe "%SCRIPTROOT%\ZTIApplications.wsf"                          TSManager   13-2-2020 11:18:41  6200 (0x1838)
Process completed with exit code 0                                                              TSManager   13-2-2020 11:19:02  6200 (0x1838)
!--------------------------------------------------------------------------------------------!  TSManager   13-2-2020 11:19:02  6200 (0x1838)
Successfully completed the action (Test) with the exit win32 code 0                             TSManager   13-2-2020 11:19:02  6200 (0x1838)
Executing in non SMS standalone mode. Ignoring send a task execution status message request     TSManager   13-2-2020 11:19:02  6200 (0x1838)
Set a global environment variable _SMSTSLastActionRetCode=0                                     TSManager   13-2-2020 11:19:02  6200 (0x1838)
Set a global environment variable _SMSTSLastActionName=Test                                     TSManager   13-2-2020 11:19:02  6200 (0x1838)
Set a global environment variable _SMSTSLastActionSucceeded=true                                TSManager   13-2-2020 11:19:02  6200 (0x1838)
Clear local default environment                                                                 TSManager   13-2-2020 11:19:02  6200 (0x1838)
The action (Test) requested a retry                                                             TSManager   13-2-2020 11:19:02  6200 (0x1838)
Created volatile registry entry for pending reboot initiated by this task sequence              TSManager   13-2-2020 11:19:02  6200 (0x1838)
The action (Test) initiated a reboot request                                                    TSManager   13-2-2020 11:19:02  6200 (0x1838)
Executing in non SMS standalone mode. Ignoring send a task execution status message request     TSManager   13-2-2020 11:19:02  6200 (0x1838)
****************************************************************************                    TSManager   13-2-2020 11:19:02  6200 (0x1838)
Execution engine result code: Reboot (2)                                                        TSManager   13-2-2020 11:19:02  6200 (0x1838)
Process completed with exit code 2147945410                                                     TSMBootstrap    13-2-2020 11:19:02  6168 (0x1818)
Exiting with return code 0x80070BC2                                                             TSMBootstrap    13-2-2020 11:19:02  6168 (0x1818)
----------------------
... More reboot stuff ...
----------------------
Expand a string: WinPEandFullOS                                                                 TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Executing command line: cscript.exe "%SCRIPTROOT%\ZTIApplications.wsf"                          TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Process completed with exit code 0                                                              TSManager   13-2-2020 11:19:34  8652 (0x21CC)
!--------------------------------------------------------------------------------------------!  TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Successfully completed the action (Test) with the exit win32 code 0                             TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Executing in non SMS standalone mode. Ignoring send a task execution status message request     TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Set a global environment variable _SMSTSLastActionRetCode=0                                     TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Set a global environment variable _SMSTSLastActionName=Test                                     TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Set a global environment variable _SMSTSLastActionSucceeded=true                                TSManager   13-2-2020 11:19:34  8652 (0x21CC)
Clear local default environment                                                                 TSManager   13-2-2020 11:19:34  8652 (0x21CC)

1 Ответ

0 голосов
/ 13 февраля 2020

После некоторой дополнительной отладки и поиска в Google я нашел ответ, который искал. Сначала я нашел это , а затем это топи c. Эти темы указали мне правильное направление. Оказывается, я запускаю скрипт Powershell как Application в последовательности задач MDT. Мне легко добавлять сценарии в качестве приложений, потому что я могу легко назначить их для последовательности задач НО , где теряются маги c из return code. Сценарий ZTIapplications запускает сценарий powershell, так как powershell.exe -ExecutionPolicy bypass -Command "& { & '%deployroot%\Applications\Test\TestRerunTask.ps1'; Exit $LastExitCode }" захватывает код возврата, но код возврата не передается обратно в последовательность задач SMSTS, поэтому предполагается, что «Приложение» было успешно установлено. При вызове сценария из MDT Run Powershell Script все работает, как и ожидалось.

Я все еще ищу способ все еще использовать сценарий Powershell в качестве приложения в MDT, сохраняя код возврата работающим до самого конца, но для Тем временем у меня есть подходящий обходной путь

...