Philip Wiki

Персональный wiki-сайт

Инструменты пользователя

Инструменты сайта


docs:blog:2016:09:test-connections_quota

[POWERSHELL] Ограничения Test-Connections

Недавно столкнулся с одной неожиданной проблемой, когда необходимо было проверить сетевую доступность чуть более чем 1000 хостов в локальной сети. Вдруг оказалось, что командлет Test-Connections начинает ругаться на некое нарушение квоты. Погуглив эту тему, выяснить точную причину не удалось, только убедился в том, что такая проблема действительно есть.

На деле оказалось, что Test-Connections принимает не более 500 значений (по крайней мере проблема воспроизводилась на двух разных Win 10) и пришлось придумывать (и гуглить) решение:

$counter = [pscustomobject] @{ Value = 0 }
$groupSize = 500
$compgroups = $computers.Name | Group-Object -Property { [math]::Floor($counter.Value++ / $groupSize) }

Создаём счетчик, обнуляем его, говорим, что группы у нас будут состоять из максимум 500 значений, после чего долбим массив на группы. В результате получаем массив из 1081 значения, разбитый на три части:

> $compgroups
 
Count Name                      Group
----- ----                      -----
  500 0                         {PC1, PC2, PC, PC-2...}
  500 1                         {PC-14, PC-22, PC11, PC-5-8...}
   81 2                         {PC-PC, PC-3, PC-IT, PC-1...}

Как мы видим, идентификатором группы будет её имя (Name), как следствие, просто создаём цикл, в котором за три подхода опросим все хосты. Пример скрипта полностью:

$computers = Get-ADComputer
$counter = [pscustomobject] @{ Value = 0 }
$groupSize = 500
$compgroups = $computers.Name | Group-Object -Property { [math]::Floor($counter.Value++ / $groupSize) }
foreach ($i in $compgroups.Name) {
    Test-Connection -ComputerName $compgroups[$i].Group -Count 1 -ErrorAction Ignore
    }

P.S. Внимательный читатель резонно может заменить, что такую проблему легко можно решить конструкцией вида:

$computers.name | ForEach-Object { Test-Connection -ComputerName $_ -Count 1 -ErrorAction Ignore }

Есть одно но, в примере я не акцентировал на этом внимания и не озвучивал, но опрашивать хосты планировалось в фоне (фоновые задания). Это получается сильно быстрее и не работает с такой простой конструкцией скрипта.

Только авторизованные участники могут оставлять комментарии.
docs/blog/2016/09/test-connections_quota.txt · Последнее изменение: 09.09.2016 11:29 — philip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki