Резюме. Запрошений блогер 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