Invoke-Command in a background job

前端 未结 4 1349
庸人自扰
庸人自扰 2021-01-20 14:58

I have a powershell 2.0 script which should run a command on several servers and process the output. I want to run the command and the processing for each server in a backgr

相关标签:
4条回答
  • 2021-01-20 15:27

    I prefer to use Start-Job to run invoke-command so that I can watch and handle the jobs on the central machine using Get-Job.

    When I loop through the "list of remote computers" I use the "current computer name" as the -Name parameter in the Start-Job so that I can watch each job individually and as a group.

    Just my two cents from experience.

    Edit Example:

    $job =
    { 
        $remoteJob = { ##Do Stuff Here }
        Invoke-Command -ComputerName $args[0] -ScriptBlock $remoteJob
    }
    Start-Job -Name <jobName> -ScriptBlock $job -ArgumentList <remoteComputer>
    

    To your question about why the Job "never finishes" I don't have input other than, make sure the code you are running remotely does actually end.

    Hope this helps

    0 讨论(0)
  • 2021-01-20 15:33

    This will also work, at least in Powershell 5

    invoke-command -asjob -computer $PC -scriptblock { ## do stuff }
    
    0 讨论(0)
  • 2021-01-20 15:39

    Looks like you should do it the other way:

    http://technet.microsoft.com/en-us/library/hh849698.aspx

    To run a background job on a remote computer, use the AsJob parameter that is available on many cmdlets, or use the Invoke-Command cmdlet to run a Start-Job command on the remote computer. For more information, see about_Remote_Jobs.

    0 讨论(0)
  • 2021-01-20 15:39

    For Latest version of PS you can create a New Session and use it with Invoke-Command start-job cmdlets instead of using the ComputerName arguments directly.

    $s = new-pssession -computername Server01
    invoke-command -session $s -scriptblock { start-job -scriptblock {get-eventlog system}}
    
    0 讨论(0)
提交回复
热议问题