Start-job vs. Invoke-command -asjob
Asked Answered
M

2

7

I'm trying to do basic background jobs in PowerShell 2.0, and I'm seeing different things with start-job and invoke-command -asjob.

If I do this:

start-job -scriptblock {get-process}

I get a job object, but the child job (which is created automatically by start-job) always has a JobStateInfo of "NotStarted".

this, however, works as expected:

invoke-command -scriptblock {get-process} -computer localhost -asjob

I've run the enable-psremoting....anything else I need to do to get background jobs working?

Matheny answered 12/11, 2009 at 22:9 Comment(0)
A
3

The first example using start-job does not use HTTP for the call and instead uses an IPC channel with WinRM to run; it does not require administrative privileges this way. The second example with invoke-command does require admin rights (by default) and will connect via HTTP and WinRM.

To be honest, I would have expected the second one to fail for most people. If you run: Receive-Job against the ID of the start-job invocation, do you get any error messages?

-Oisin

Agglutinogen answered 12/11, 2009 at 23:15 Comment(2)
No, it just doesn't return anything (which I'd expect given that the child job is still NotStarted).Matheny
BTW...it's good to know that they work differently internally. Still doesn't explain why start-job doesn't work, but at least I'm not insane.Matheny
K
0

To receive an updated JobStateInfo you'll need to use Get-Job and the job created by Start-Job. Though, if you're using this information to see when the job finishes, Wait-Job or Receive-Job -wait might be better suited to your needs.

Wait-Job simply waits until the job, or list of jobs, indicated is finished before moving on. Receive-Job -wait does the same thing, but it also gathers the results/output of the job.

Kist answered 16/3, 2015 at 15:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.