Когда я запускаю 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.