Так вот, в Windows XP и Server2003 КодВозврата возвращается корректный, т.е. 0 - пинги прошли, 1 - пинги не прошли, оборудование выключено.
Для Server2008 эти же строки всегда возвращают 0, т.е. успешное выполнение команды.
Где копать, может кто сталкивался?
(1)
А может по разному работает не "WshShell.run", а сама программа ping ? ;-)
Попробуйте подменить файлы из одной в другую систему. Конечно, если при этом не появятся другие проблемы.
(4) hogik, уж лучше тогда не подменять утилиту из старых версий винсервера (мало ли чем это выльется), а просто взять стороннюю утилиту, например, http://www.kwakkelflap.com/files/fping300.zip
(6)
Угу. ;-)
Только чтобы её брать нужно четко понимать - КТО на самом деле "возвращают 0"(с).
Ох. "эти же строки всегда возвращают"(с)
И грустно и смешно...
У меня тоже подозрение, что 0 возвращает не пинг. :(
Ох. "эти же строки всегда возвращают"(с)
Прошу прощения, что не достаточно понятно объяснил, упустил некоторые слова. Имелось ввиду, что одинаковые строчки кода использовались на разных серверах и в "КодВозврата" попадал результат выполнения "wss.Run".
(8)
"У меня тоже подозрение, что 0 возвращает не пинг."(с) Проверьте:
1) Что возвращает родной ping в консоли на 2003 и 2008.
2) Что возвращает ping в консоли в 2008 взятый из 2003.
3) Что возвращает другая программа при вызове через WScript.Shell, которая гарантированно возвращает разные коды возврата в консоли.
4) Что возвращается из WScript.Shell в 2008 если вызвать отсутствующую в системе программу.
5) Экзотика. ;-) Какой тип переменной "КодВозврата" после выполнения WScript.Shell в 2008.
P.S.
Мой "Ох" был не по поводу Ваших формулировок, а по поводу НАШЕЙ тяжелой жизни.
(1)
Отменяю свои рекомендации из (13) сообщения. :-)
Поигрался в консолях для сети из WinXPx64, Win7x64, Win2000AdvServer (все с последними SP). Достоверно возвращается единица только в случае синтаксических ошибок в параметрах запуска PING-а. Остальные условия возврата единицы не берусь систематизировать и описывать при включении/выключении адаптеров, компьютеров, отсутствующих в сети адресов и т.д. Действительно, логичнее всего возвращается единица проверки со стороны WinXP. Да и то - не очень...
Ищите другой вариант решения Вашей задачи - вообще без PING.EXE.
(15) hogik, на худой конец, можно распарсить вывод ping'a как текст.
хотя, согласен, пинг - это не универсальный ответ на вопрос "доступен ли хост"? например, он может быть доступен, но ICMP гасится файрволом
(18)
Думаю, даже больше того. Кто и где сказал, что код возврата из программы PING.EXE связан с результатом тестирования - есть или нетУ сетевого соединения. Код возврата говорит об успешности выполнения программы. Разве то, что программа определила "сбой" в сети не говорит об успешности её выполнения. Она УСПЕШНО провела проверку сетевого соединения, и сетевое соединение не работает. :-) Если код возврата несет в себе смысл есть/нет сетевое соединение, то это должно быть ЯВНО описано в описании программы.
Синтаксические ошибки в параметрах фиксируются соответствующим кодом возврата. Возможно, что к синтаксическим ошибкам можно отнести некоторое значение сетевого адреса. Например, в системе нетУ вообще сетевой карты. ;-)
UAC выключен. К тому же точно видно, что пинг выполняется, т.к. при нормальном прохождении пинга команда выполняется мгновенно в ином случае идет задержка 2-3 секунды как и не в фоновом режиме. Уже подумываю анализировать именно эту задержку для контроля включения оборудования.
Есть еще дополнение к исходной информации. Строки кода выполняются в регламентном задании, (т.е. в фоновом режиме на сервере предприятия). Мониторится включение весов и при доступности периодически забираются результаты взвешиваний с FTP весов. В общем, если с пингом не выйдет, есть куча других путей.