WshShell.run работает по разному в Server2003/2008

1. mikls 20 19.10.12 11:33 Сейчас в теме
Столкнутся с такой проблемой:
Для контроля включения оборудования в производстве пингую определенные адреса следующим кодом:

wss=Новый COMОбъект("WScript.Shell");
КодВозврата = wss.Run("ping -n 1 192.168.1.161",0,Истина);


Так вот, в Windows XP и Server2003 КодВозврата возвращается корректный, т.е. 0 - пинги прошли, 1 - пинги не прошли, оборудование выключено.
Для Server2008 эти же строки всегда возвращают 0, т.е. успешное выполнение команды.
Где копать, может кто сталкивался?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. hogik 444 21.10.12 17:52 Сейчас в теме
(1)
А может по разному работает не "WshShell.run", а сама программа ping ? ;-)
Попробуйте подменить файлы из одной в другую систему. Конечно, если при этом не появятся другие проблемы.
6. andrewks 1375 21.10.12 18:15 Сейчас в теме
(4) hogik, уж лучше тогда не подменять утилиту из старых версий винсервера (мало ли чем это выльется), а просто взять стороннюю утилиту, например, http://www.kwakkelflap.com/files/fping300.zip
7. hogik 444 21.10.12 18:36 Сейчас в теме
(6)
Угу. ;-)
Только чтобы её брать нужно четко понимать - КТО на самом деле "возвращают 0"(с).
Ох. "эти же строки всегда возвращают"(с)
И грустно и смешно...
andrewks; +1 Ответить
9. mikls 20 22.10.12 11:16 Сейчас в теме
(6) andrewks,
А сторонний Fping даже задержки на выключенном оборудовании не дал, сразу сообщил, что все хорошо. :(
16. andrewks 1375 23.10.12 07:35 Сейчас в теме
(9) mikls, что конкретно он сообщает в консоли? описание читали? там разные коды возврата в зависимости от ситуации
8. mikls 20 22.10.12 11:04 Сейчас в теме
(4) hogik,
А может по разному работает не "WshShell.run", а сама программа ping ? ;-)

Спасибо, но к сожалению не сработало, взял ping.exe от 2003 сервака, эфет тот же.

(5) andrewks,
что выдаёт команда ping -n 1 192.168.1.161 при выполнении в консоли?

И родной и скопированный пинги выдают одинаковый результат:
P:\>ping 192.168.1.161 -n 1
Обмен пакетами с 192.168.1.161 по с 32 байтами данных:
Ответ от 192.168.1.17: Заданный узел недоступен.
Статистика Ping для 192.168.1.161:
Пакетов: отправлено = 1, получено = 1, потеряно = 0
(0% потерь)
P:\>ping_ 192.168.1.161 -n 1
Обмен пакетами с 192.168.1.161 по с 32 байт данных:
Ответ от 192.168.1.17: Заданный узел недоступен.
Статистика Ping для 192.168.1.161:
Пакетов: отправлено = 1, получено = 1, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Показать

На 2003 серваке результат выполнения пинга в консоли точно такой же.

(7) hogik,
КТО на самом деле "возвращают 0"(с).

У меня тоже подозрение, что 0 возвращает не пинг. :(

Ох. "эти же строки всегда возвращают"(с)

Прошу прощения, что не достаточно понятно объяснил, упустил некоторые слова. Имелось ввиду, что одинаковые строчки кода использовались на разных серверах и в "КодВозврата" попадал результат выполнения "wss.Run".
11. andrewks 1375 22.10.12 11:42 Сейчас в теме
(8) mikls, что-то какие-то странные ответы от пинга.

а какие ответы идут, если этот адрес пинговать на сервере2003?
12. mikls 20 22.10.12 11:59 Сейчас в теме
(11) andrewks,
Странные они из-за параметра "-n 1", т.е. выполнить однократный пинг.
На 2003-м полное совпадение с приведенным выше.
17. andrewks 1375 23.10.12 07:38 Сейчас в теме
(12) mikls, нет, я имел в виду, что при недоступном узле

Пакетов: отправлено = 1, получено = 1, потеряно = 0 (0% потерь)
13. hogik 444 22.10.12 17:54 Сейчас в теме
(8)
"У меня тоже подозрение, что 0 возвращает не пинг."(с)
Проверьте:
1) Что возвращает родной ping в консоли на 2003 и 2008.
2) Что возвращает ping в консоли в 2008 взятый из 2003.
3) Что возвращает другая программа при вызове через WScript.Shell, которая гарантированно возвращает разные коды возврата в консоли.
4) Что возвращается из WScript.Shell в 2008 если вызвать отсутствующую в системе программу.
5) Экзотика. ;-) Какой тип переменной "КодВозврата" после выполнения WScript.Shell в 2008.


P.S.
Мой "Ох" был не по поводу Ваших формулировок, а по поводу НАШЕЙ тяжелой жизни.
14. Leon99 22.10.12 18:03 Сейчас в теме
15. hogik 444 23.10.12 01:23 Сейчас в теме
(1)
Отменяю свои рекомендации из (13) сообщения. :-)
Поигрался в консолях для сети из WinXPx64, Win7x64, Win2000AdvServer (все с последними SP). Достоверно возвращается единица только в случае синтаксических ошибок в параметрах запуска PING-а. Остальные условия возврата единицы не берусь систематизировать и описывать при включении/выключении адаптеров, компьютеров, отсутствующих в сети адресов и т.д. Действительно, логичнее всего возвращается единица проверки со стороны WinXP. Да и то - не очень...
Ищите другой вариант решения Вашей задачи - вообще без PING.EXE.
18. andrewks 1375 23.10.12 07:40 Сейчас в теме
(15) hogik, на худой конец, можно распарсить вывод ping'a как текст.
хотя, согласен, пинг - это не универсальный ответ на вопрос "доступен ли хост"? например, он может быть доступен, но ICMP гасится файрволом
19. hogik 444 23.10.12 18:40 Сейчас в теме
(18)
Думаю, даже больше того. Кто и где сказал, что код возврата из программы PING.EXE связан с результатом тестирования - есть или нетУ сетевого соединения. Код возврата говорит об успешности выполнения программы. Разве то, что программа определила "сбой" в сети не говорит об успешности её выполнения. Она УСПЕШНО провела проверку сетевого соединения, и сетевое соединение не работает. :-) Если код возврата несет в себе смысл есть/нет сетевое соединение, то это должно быть ЯВНО описано в описании программы.
Синтаксические ошибки в параметрах фиксируются соответствующим кодом возврата. Возможно, что к синтаксическим ошибкам можно отнести некоторое значение сетевого адреса. Например, в системе нетУ вообще сетевой карты. ;-)
2. baldyman 20.10.12 20:56 Сейчас в теме
А интереса ради - UAC включен или выключен ??
3. mikls 20 21.10.12 15:36 Сейчас в теме
UAC выключен. К тому же точно видно, что пинг выполняется, т.к. при нормальном прохождении пинга команда выполняется мгновенно в ином случае идет задержка 2-3 секунды как и не в фоновом режиме. Уже подумываю анализировать именно эту задержку для контроля включения оборудования.
5. andrewks 1375 21.10.12 18:03 Сейчас в теме
для начала: что выдаёт команда ping -n 1 192.168.1.161 при выполнении в консоли?
10. mikls 20 22.10.12 11:39 Сейчас в теме
Есть еще дополнение к исходной информации. Строки кода выполняются в регламентном задании, (т.е. в фоновом режиме на сервере предприятия). Мониторится включение весов и при доступности периодически забираются результаты взвешиваний с FTP весов. В общем, если с пингом не выйдет, есть куча других путей.
20. mikls 20 24.10.12 10:18 Сейчас в теме
Прошу прощения за ожидание.
Спасибо предложившему сторонний fping. C ним все работает стабильно, но от параметра "-n 1" пришлось отказаться.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот