Когда я запускаю PowerShell "job" из cmd, где я могу Job-получить результаты работы?

Скажем, я запускаю сценарий PowerShell следующим образом:

C:\utils\powershell\MDB_BE>powershell -File .\MonitorFileSize.ps1

WARNING: column "Command" does not fit into the display and was removed.

Id              Name            State      HasMoreData     Location
--              ----            -----      -----------     --------
1               Job1            Running    True            localhost

... и этот сценарий PowerShell запускает работу...

Когда я открываю другое окно PowerShell, я замечаю, что задание не отображается при запуске Receive-Job 1Итак, куда делась работа, и как я могу оставить ее работающей, найти ее снова, когда я выйду из процесса Powershell?

1 ответ

Решение

Get-Job возвращает только объекты заданий из текущего сеанса. Задание запускается как поток в Powershell.exe, поэтому при выходе из Powershell задание прерывается.

Вот хорошая ссылка, рассказывающая о рабочих местах Powershell:

http://startlearningpowershell.com/?Name=PowerShell%20and%20Background%20Jobs

В самом первом разделе говорится следующее:

Они не являются запланированными задачами и не будут выполняться, если PowerShell в данный момент не запущен.

Изменить: Технически, некоторые задания Powershell порождают совершенно новые экземпляры процесса Powershell, а некоторые нет.

Изменить 2: Чтобы более точно ответить на ваш вопрос: Когда вы запускаете Powershell из cmd.exe, cmd.exe порождает экземпляр Powershell.exe с cmd.exe в качестве родителя. Если задание в этом сценарии Powershell затем запустило задание PS, для которого требовался другой процесс Powershell.exe, другой был бы создан как дочерний элемент первого Powershell.exe. Если задание PS в сценарии не завершается, и ваши Powershells закрываются до того, как задание может быть завершено, рассмотрите возможность включения в сценарий Wait-Job.

Другие вопросы по тегам