Spero che tu sia su Powershell versione 2. Se sei così, questo è come fare un processo in background per un lavoro:
Start-Job {Get-Process}
Questo eseguirà il lavoro in background. Se vuoi interagire con il lavoro, basta assegnarlo a una variabile:
$foo = Start-Job {Get-Process}
Ora, naturalmente, la complessità arriva quando si sa quando il lavoro è finito. Capisco che è lo scopo della campana che hai inserito nell'esempio originale. Sfortunatamente Powershell tiene la pipa finché non chiedi i risultati del lavoro. Per ottenere i risultati dal lavoro, utilizzare il cmdlet Receive-Job:
Receive-Job $foo
Sono interessato a un modo per avvisare quando anche un lavoro in background è completato, quindi continuerò a cercare una soluzione.
Oh e per maggiori informazioni:
Get-Help about_jobs
Ok, ecco come ottenere un segnale acustico a completamento. Per prima cosa, leggi questo Ricevi notifiche quando viene eseguito un lavoro in background tra l'altro (questo è un grande sito di risorse). Ho preso le informazioni lì e ho aggiunto questa funzione al mio profilo:
function Register-JobWait{
param(
$Job
)
Register-ObjectEvent $job StateChanged -Action {
[Console]::Beep(1000,500)
$eventSubscriber | Unregister-Event
$eventSubscriber.Action | Remove-Job
} | Out-Null
}
Ho anche aggiunto un alias nel mio profilo:
set-alias rjw Register-JobWait
quindi ora se voglio eseguire lo sfondo di qualcosa, faccio questo:
$foo = Start-Job {1..10 | Get-Process}
rjw $foo
Aspetto il segnale acustico allora:
Receive-Job $foo