Powershell: как остановить стартовую работу? - PullRequest
1 голос
/ 30 июня 2019

У меня есть следующая работа в powershell:

$DoIt = '...'
....
 If ([IntPtr]::size -eq 8) {
        start-job { 
        param($a) IEX $a 
        } -RunAs32 -Argument $DoIt | wait-job | Receive-Job
        Get-Job | Stop-Job
        Exit
        Write-Host "exit powershell" -NoNewLine -ForegroundColor Green
}   
else {
    IEX $DoIt
}

Проще говоря, как остановить или закрыть powershell после выполнения функции start-job.Что мне делать? Попробовал несколько способов найти, что это не сработало.

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

Remove-Job.Вот пример.Если задание завершено, вам не нужно запускать стоп-задание.Хотя invoke-expression почти всегда является неправильным ответом, и вы должны наблюдать за вводом данных пользователем.Я в оссе.

PS /Users/js> $job = start-job { param($a) sleep $a } -Args 3600
PS /Users/js> get-job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
11     Job11           BackgroundJob   Running       True            localhost             param($a) sleep $a

PS /Users/js> stop-job $job
PS /Users/js> remove-job $job  # or just remove-job -force
PS /Users/js> get-job  # none
0 голосов
/ 30 июня 2019

как остановить или закрыть powershell после выполнения функции запуска задания.

  • Если вы выйдете из сеанса до того, как фоновое задание, запущенное с Start-Job, будет завершено, вы остановите (прервать) его неявно потому что PowerShell автоматически очищает отложенные фоновые задания при выходе из сеанса, который их создал, .

    • Поэтому, если вы хотите запустить фоновую операцию, которая продолжает выполняться , когда завершается сеанс, инициировавший ее, вам придется использовать другой механизм, например Start-Process -WindowStyle Hidden ... (только для Windows) .
  • К дождитесь завершения фонового задания, используйте Wait-Job или - в сочетании с получением его вывода - Receive-Job -Wait.

    • Обратите внимание, что это полезно только в том случае, если вы выполняете другие действия между запуском фонового задания и ожиданием его завершения - в противном случае вы можете просто запустить операции напрямую, без необходимости фонового задания.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...