Mike Shepard
Mike Shepard

Reputation: 18166

Start-job vs. Invoke-command -asjob

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?

Upvotes: 7

Views: 18768

Answers (2)

Skip
Skip

Reputation: 1

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.

Upvotes: 0

x0n
x0n

Reputation: 52450

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

Upvotes: 3

Related Questions