Powershell将变量传递给start-job

时间:2012-04-09 15:59:44

标签: variables powershell start-job

在powershell中我想学习将变量调用到起始作业的最佳方法,因此我不必编辑每个服务器的脚本,因为它将基于我放置脚本的客户端而具体上。

$Servername = 'Server1'
    $pingblock = {
      pathping $servername | Out-File C:\client\PS\ServerPing.TXT
    }
    start-job $pingblock

当我运行上面的代码时,我只是得到一个带有帮助的文件,好像我忘记了指定$ servername。

2 个答案:

答案 0 :(得分:26)

使用-ArgumentList上的Start-Job参数,例如:

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

在你的情况下:

$pingblock = {param($servername) pathping $servername | Out-File C:\...\ServerPing.txt}
Start-Job $pingblock -Arg Server1

答案 1 :(得分:2)

通过PSv3 +替代Keith Hill's helpful answer

$using: scope modifier可用于在传递给Start-Job的脚本块内引用调用方作用域中的变量,作为传递参数的替代方法(默认情况下,作为后台作业执行的脚本块会查看调用方的任何变量或其他定义):

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

以上结果:

Target: Server1

请注意,将脚本块传递到Invoke-Command时可以使用相同的技术-请参见this question