Я впервые использую Джобса в powershell. Я поместил функцию в работу, и у меня есть цикл while, который отображает обратный отсчет ETA. Я хочу, чтобы обратный отсчет времени был приостановлен / скорректирован, если он достигает предварительно определенного времени, а функция еще не завершила обработку.
Я успешно создал обратный отсчет, но пробую варианты Receive-Job
и Get-Job
. Я также сделал глобальную переменную, которая изменяется от 0 до 1, когда функция завершается. В то время как цикл while просматривает переменную в бесконечном цикле, пока она не изменится
$Completion = "0"
$TWOLength = "10"
$ScanFunction = {InitiateScan -Type "Auto"}
$ScanJob = Start-Job -ScriptBlock $ScanFunction
$iTWO=1
Do {
$TLlabel.Text = "Scanning Computer ETA: "+$LoadProVal+" Seconds"
$TLPB.Value = -($LoadProVal-$LoadProMax)
$TLform.Refresh()
$LoadProVal--
$iTWO++
$TLform.Refresh()
Start-Sleep 1
}
While ($iTWO -le $TWOLength)
While ($Completion -ne "1"){
#Do Loop Infinite until Variable Changes
Receive-Job $ScanJob -Keep
Write-Host $InitialScan
Start-Sleep 5
}
Когда этот код выполняется, я получаю сообщение об ошибке The term 'InitiateScan' in not recognized
, как только он начинает обрабатывать цикл Receive-Job $ScanJob -Keep
.
Если я поставлю Receive-Job
перед циклом while, ошибка не произойдет, поэтому я добавил параметр -Keep
Желаемый конечный результат должен быть:
-старт сканирования в задании
-Начать обратный отсчет
-При достижении $TWOLength
, проверить работу $Completion
Переменная
-Если $Completion
не 1, подождите и проверьте снова
-Если $Completion
равно 1, завершите цикл и продолжайте