Автоматическое извлечение данных из задания PowerShell во время работы - PullRequest
4 голосов
/ 07 декабря 2011

Пытаясь сделать что-то совершенно не зависящее от PowerShell, я, кажется, наткнулся на кирпичную стену.У меня есть сценарий основной формы, который управляет большинством моих функций, но мне нужен другой сценарий для открытия слушателя (system.Net.Sockets.Udpclient.Receive) и продолжения подачи информации в текстовое поле в основной форме в течение всей работы программы,За всю свою жизнь я не могу обойти эту безрассудную не-детскую среду, от которой страдают рабочие места;нет точечного источника, нет глобальных переменных области действия, ничего.Я могу поставить на него объект-прослушиватель для состояния, измененного до завершения, а затем открыть другого прослушивателя и попытаться выполнить этот путь, но он будет очень грязным и ненадежным.который не вешает приложение для ответа, событие для извлечения hasmoredata или способ обновления текстового поля в основном скрипте из задания.

1 Ответ

7 голосов
/ 07 декабря 2011

Вы можете вернуть данные из задания, вызвав событие и перенаправив его обратно в локальный сеанс.

Вот пример:

 $job = Start-Job -Name "ReturnMessage" -ScriptBlock {
     # forward events named "MyNewMessage" back to job owner
     # this even works across machines
     Register-EngineEvent -SourceIdentifier MyNewMessage -Forward

     while($true) {
         sleep 2
         $i++
         $message = "This is message $i."
         # raise a new progress event, assigning to $null to prevent
         # it ending up in the job's output stream
         $null = New-Event -SourceIdentifier MyNewMessage -MessageData $message
     }
 }

$event = Register-EngineEvent -SourceIdentifier MyNewMessage -Action {
    Write-Host $event.MessageData -ForegroundColor Green
}

<# Run this to stop job and event listner
$job,$event| Stop-Job -PassThru| Remove-Job
#>

Обратите внимание, что вы все еще можете печатать в приглашении во время выполнения задания. Выполните код в комментариях к блоку, чтобы остановить список заданий и событий.

...