Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Next
В дополнение к этим новым возможностям в самом репозитории WMI появились классы, представляющие локальное время и часовой пояс не во внутреннем формате WMI, а в удобном для пользователя виде. Эти классы: Win32_LocalTime и Win32_TimeZone – удобное дополнение для работы с датами и временем. Кроме того, класс Win32_LocalTime рекомендуется использовать для отслеживания интервалов времени с помошью обработчиков событий WMI, которым была посвящена предыдущая часть статьи. Обратите внимане, что минимальный интервал времени, который позволяет отслеживать класс Win32_LocalTime, равен 1 секунде.
Сканирование хостов сети и провайдер Ping
Провайдер Ping предоставляет в репозиторий WMI всего один класс Win32_PingStatus. Они позволяют из сценариев WMI посылать ICMP ECHO-запросы в сеть. Попросту пинговать хосты сети. К сожалению, этот провайдер поддерживается только в Windows XP и Windows Server 2003.
Если вам нужно написать сценарий WMI, который подключается к удаленной машине (как это делать, мы обсуждали в предыдущей статье [2]), то перед подключением хорошо бы проверить – доступна ли эта машина. Если машина по сети не доступна (выключена или отсоединена от сети), то подключение к WMI не состоится и в ваш сценарий будет возвращена ошибка. Сама по себе ошибка не представляет большой проблемы, но перед тем как WMI вернет ее вам, пройдет довольно большой тайм-аут (около 30-60 секунд).
Таким образом, если вы запустите сценарий, который должен будет подключиться к 100 машинам по сети и 25 из них будут недоступны, то время выполнения сценария займёт от 15 до 30 минут.
Если мы сможем перед попыткой подключения к удаленной машине быстро проверить, доступна ли она, то это значительно сократит время ожидания. Вот как раз эту задачу и позволяет эффективно решать Ping. Вам следует не забывать, что проверка доступности хоста по ICMP эхо-запросу может быть неудачной и из-за применения в сети на маршруте следования пакета фильтрующих маршрутизаторов или firewall.
В операционных системах Windows 2000, а также Windows NT 4.0 и Windows 98 эту проблему можно было решить только одним способом: запускать из сценария консольную команду ping и разбирать то, что эта утилита вернула на STDOUT, или анализировать код возврата утилиты PING. Пример представлен в листинге 3. Способ, конечно, не плохой, но не универсальный. Как известно, на локализованных версиях Windows ответы команды ping выводятся на локальном языке. Поэтому для каждой языковой версии ОС пришлось бы писать свой разборщик вывода – согласитесь, что это не удобно. С другой стороны анализ кода возврата команды PING не позволяет понять причину ошибки при отправке ICMP-пакета.
Листинг 3. Старый способ, разбирающий вывод на STDOUT команды ping
strComputer = "www.ya.ru"
Set objShell = CreateObject("WScript.Shell")
Set objScriptExec = objShell.Exec("ping -n 1 -w 700 –f –l 8 " & strComputer)
strPingResults = LCase(objScriptExec.StdOut.ReadAll)
If InStr(strPingResults, "reply from") Then
If InStr(strPingResults, "destination net unreachable") Then