我已经编写了PowerShell脚本将一个文件(包含主机名)拆分为十个文件,执行ping(即PowerShell test-Connection命令)将每个文件中的hostNames中的hostNames分为ping。为了加快过程,我使用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
}
}
}
这几件事是错误的。默认情况下,您在作业内使用的变量在您的PowerShell会话中不可用(反之亦然)。因此,您遇到了多个问题。您不会在工作中放任何变量,也没有从工作中找回任何变量。
还将起始工作放在错误的位置。现在,您正在使用整个foreach循环开始1个工作。我假设您想单独处理每台计算机。因此,您应该在foreach循环内开始工作。
我在此之前写了一个博客文章,适合您的情况。您可以在这里找到它。