我已经编写了powershell脚本,将一个文件(包含主机名)拆分为十个文件,对每个文件中的主机名执行ping (即powershell测试连接命令)。为了加快这个过程,我使用start-job命令来处理每个文件的主机名。如果我删除start-job命令,脚本就可以正常工作。但是当我使用start-job命令时,"scriptblock“中使用的数组没有返回所需的输出。相反,它仍然是空的。以下是部分脚本(仅用于一个文件处理)。请指点一下,我这里漏掉了什么?
Start-Job -Name "Ping-Part-1" -ScriptBlock {
foreach ($Comp1 in $file_part1_content) {
If (test-Connection -ComputerName $Comp1 -Count 1 -Quiet) {
$project1 = Create-New-Object
$project1.AliveStatus = "Alive"
$project1.Hostname = $Comp1
$resultsarray_file1 += $project1
}
Else {
$project1 = Create-New-Object
$project1.AliveStatus = "Not Alive"
$project1.Hostname = $Comp1
$resultsarray_file1 += $project1
}
}
}发布于 2016-12-16 21:17:26
这里面有几个地方不对劲。默认情况下,您在作业中使用的变量在powershell会话中不可用(btw反之亦然)。所以你有多个问题。您没有在作业中放入任何变量,也没有在作业外检索任何变量。
另外,你把开始工作放在了错误的地方。现在,您正在启动一个包含整个foreach循环的作业。我假设您想要单独处理每台计算机。因此,您应该在foreach循环中启动作业。
前段时间我写了一篇关于这个的博文,它适合你的场景。你可以在here上找到它。
https://stackoverflow.com/questions/41185173
复制相似问题