测试连接性能缓慢

时间:2015-08-24 17:29:57

标签: multithreading powershell

我有一个设备列表,我想ping它们以查看它们是否处于活动状态。如果它们是活动的(即使没有),我想登录到一个文件。因此,活动设备转到一个文件,“unpingable”设备被写入另一个文件。我下面的脚本适用于较小的计算机样本,但是当我添加完整列表时,脚本的“测试连接”部分需要数小时才能完成(大约8,000台设备)。有没有办法通过并行运行命令来提高性能?在我的搜索中,我遇到了David Wyatt =>的这个包装函数。 TestConnectionAsync但我不确定如何将结果分成两个文件。任何帮助,将不胜感激。

代码:

ForEach ($PC in $Computer_List) {
  If (Test-Connection -ComputerName $PC -Quiet -Count 1) {
    Add-Content -value $PC -Path "$UPpath"
  } Else {
    Add-Content -Value $PC -Path "$DOWNpath"
  }
}

1 个答案:

答案 0 :(得分:2)

Test-ConnectionAsync的输出使这很容易:

  

当您指定Test-ConnectionAsync的-Quiet开关时,它将返回PSCustomObjects的集合,其属性为" ComputerName"和"成功"。成功是您从Test-Connection -Quiet收到的布尔值; PSCustomObject只允许您将该结果与目标地址相关联。

所以你要做的就是:

  1. Ping所有计算机并捕获输出
  2. 查看Success属性,看看是否应将其放在一个文件或另一个文件中
  3. # 1. Gather ping results
    $TestResults = $ComputerList | Test-ConnectionAsync -Quiet
    
    # 2. Loop through results and look at Success
    foreach($Result in $TestResults){
        $FilePath = if($Result.Success){
            $UPpath
        } else {
            $DOWNpath
        }
        Add-Content -Path $FilePath -Value $Result.ComputerName
    }