Attività di sfondo PowerShell


3

come faccio un compito in background in PowerShell?

$ ant >/dev/null &        #cygwin

Il più vicino che posso ottenere a questo in Powershell è

ps2> start-job {ant |out-null; `a}   #powershell

ma poi non ottengo risultati in tempo reale, né ricevo il segnale acustico. Devo eseguire il polling per esso con receive-job e ottenere il segnale acustico quando lo stdout viene interrogato.

Risposte:


6

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.