$Servername = 'Server1'
$pingblock = {
pathping $servername | Out-File C:\client\PS\ServerPing.TXT
}
start-job $pingblock
当我运行上面的代码时,我只是得到一个带有帮助的文件,好像我忘记了指定$ servername。
答案 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。