Если я следую за вами, вы не можете разделить состояние между двумя разными экземплярами консоли. То есть, это не так, как вы хотите. Однако это не правда, что вы не можете контролировать работу из одного сеанса. Вы можете сигнализировать с событиями изнутри задания:
Start-Job -Name "bgsignal" -ScriptBlock {
# forward events named "progress" back to job owner
# this even works across machines ;-)
Register-EngineEvent -SourceIdentifier Progress -Forward
$percent = 0
while ($percent -lt 100) {
$percent += 10
# raise a new progress event, redirecting to $null to prevent
# it ending up in the job's output stream
New-Event -SourceIdentifier Progress -MessageData $percent > $null
# wait 5 seconds
sleep -Seconds 5
}
}
Теперь у вас есть выбор: либо Wait-Event [-SourceIdentifier Progress]
, Register-EngineEvent -SourceIdentifier Progress [-Action { ... }]
, либо обычный старый интерактивный Get-Event
, чтобы видеть и / или действовать по ходу выполнения из того же сеанса (или с другой машины, если вы запустили задание на удаленном сервер.)
Также вполне возможно, что вам не нужна инфраструктура Jobs, если вся работа выполняется на локальной машине. Взгляните на мое старое сообщение в блоге об объектах RunspaceFactory и PowerShell для элементарной реализации скрипта threadpool:
http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx
Надеюсь, это поможет,
-Oisin