Використання powershell workflow для паралельного пинга комп'ютерів - hey, scripting guy! Blog,

Резюме. Запрошений блогер Microsoft MVP Niklas Goude розповідає про те, як, використовуючи workflow, паралельно пінгувати комп'ютери, економлячи тим самим значну кількість часу.

Попередні пости Niklas Goude можна знайти тут.

Командлет Test -Connection використовується для відправки пакетів луна-запиту ICMP ( "ping") одному або декільком віддалених комп'ютерів.

Це простий і швидкий спосіб перевірки, чи працюють комп'ютери.

Для пинга одного комп'ютера, ви просто можете набрати:

Test-Connection -ComputerName localhost

Командлет Test -Connection за замовчуванням відправляє 4 луна-запиту. Ви можете змінити це значення на 1, вказавши параметр Count:

Test-Connection -ComputerName localhost -Count 1

Спроба пропінгувати відсутній комп'ютер призведе до помилки:

Test-Connection -ComputerName blablabla -Count 1

Test-Connection. Testing connection to computer 'blablabla' failed: No such host is known

+ Test-Connection -ComputerName blablabla -Count 1

+ CategoryInfo. ResourceUnavailable: (blablabla: String) [Test-Connection], PingException

Якщо ви не хочете, щоб повідомлення про помилку відображалося, ви можете встановити параметр ErrorAction в значення SilentlyContinue (або використовувати структуру Try / Catch для обробки помилок):

Test-Connection -ComputerName blablabla -Count 1 -ErrorAction SilentlyContinue

Помилка все ще відбувається, просто не відображається на екрані (ви можете відобразити її, набравши $ Errors [0]).

Тепер давайте припустимо, що ви хочете протестувати підключення до всіх комп'ютерів в домені. Спочатку вам потрібно отримати список всіх комп'ютерів, використовуючи командлет Get-ADComputer:

$ Computers = Get-ADComputer -Filter * | Select -ExpandProperty DNSHostName

Давайте подивимося, скільки комп'ютерів в нашому домені:

Якщо вам потрібно пропінгувати кожен з цих комп'ютерів, ви можете набрати наступну команду:

foreach ($ computer in $ computers)

Test-Connection -ComputerName $ computer -Count 1 -ErrorAction SilentlyContinue

Команда поверне інформацію про кожному комп'ютері, з яким є зв'язок. Єдина проблема з цією командою в тому, що вона займає багато часу, так як вона спочатку пінг один комп'ютер, чекає поки від нього надійде відповідь і тільки потім пінг наступний.

Давайте з'ясуємо витрачається командою час за допомогою командлета Measure-Command:

foreach ($ computer in $ computers)

Test-Connection -ComputerName $ computer -Count 1 -ErrorAction SilentlyContinue