Powershell pass variable to start-job

前端 未结 2 679
闹比i
闹比i 2020-11-28 10:48

within powershell I\'d like to learn the best way to call a variable to a start job so I don\'t have to edit the script for each server as it will be specific based on the c

相关标签:
2条回答
  • To complement Keith Hill's helpful answer with a PSv3+ alternative:

    The $using: scope modifier can be used to reference the values of variables in the caller's scope inside the script block passed to Start-Job, as an alternative to passing arguments (by default, a script block executed as a background job does not see any of the caller's variables or other definitions):

    $Servername = 'Server1'
    Start-Job { "Target: " + $using:ServerName } | Receive-Job -Wait -AutoRemoveJob
    

    The above yields:

    Target: Server1
    

    Note that the same technique can be used when passing a script block for execution on a remote computer to Invoke-Command - see this question.

    0 讨论(0)
  • 2020-11-28 11:09

    Use the -ArgumentList parameter on Start-Job e.g.:

    Start-Job -Scriptblock {param($p) "`$p is $p"} -Arg 'Server1'
    

    In your case:

    $pingblock = {param($servername) pathping $servername | Out-File C:\...\ServerPing.txt}
    Start-Job $pingblock -Arg Server1
    
    0 讨论(0)
提交回复
热议问题