Не могу подружить nbtstat и Wscript.Shell.Run() #759630


#0 by SiAl-chel
Доброго дня, коллеги. Спасите мой мозг, пжл. Имеется Windows 7 x64 Ultimate, 1С - 8.3.7.1759 Требуется получить вывод команды NBTSTAT -A <IP-Адрес> Вот кусок кода: Run возвращает 1 вместо 0. Пробовал следующие варианты: Запуск = "%comspec% /c "nbtstat -A 192.168.200.108" > C: btstat.txt"; - возвращает 1, пишет в StdErr - "nbtstat не является исполняемым файлом". Запуск = "%comspec% /c c:windowssystem32 btstat.exe -A 192.168.200.108 > C: btstat.txt"; - тоже что и выще, только ругается на nbtstat.exe, Запуск = "c:windowssystem32 btstat.exe -A 192.168.200.108 > C: btstat.txt"; - пишет что "Ошибка при  вызове метода контекста" Запуск = "nbtstat -A 192.168.200.108 > C: btstat.txt"; - пишет что "Ошибка при  вызове метода контекста" Пробовал в VBScript Set objShell = CreateObject("Wscript.Shell") objShell.Run("%comspec% /c nbtstat -A 192.168.200.108 > C: btstat.txt, 0, True) работает нормально. Также работает нормально в 1С WSh = Новый COMОбъект("WScript.Shell"); Запуск = "%comspec% /c nslookup 192.168.200.108 > C: btstat.txt"; Если WSh.Run(Запуск, 0, Истина) = 0 Тогда Но дело в том, что по IP-адресу не для всех компов, откликающихся на ping возвращает DNS-имя. Может кто уже побеждал эту заразу? Или кто знает как другим способом делать программно запрос по NetBIOS, используя IP-адрес? Есть какая-то функция Win32 API GetHostByAddr, но как ее использовать в 1С - не знаю.
#1 by Garikk
<Но дело в том, что по IP-адресу не для всех компов, откликающихся на ping возвращает DNS-имя. > Для этого есть nslookup <делать программно запрос по NetBIOS, используя IP-адрес? > А что именно от нетбиоса то нужно?
#2 by SiAl-chel
1. nslookup не для всех компов возвращает имя по ip. Процентов 40% - фэйл. В обратную сторону работает нормально. Я не админ, так что настройки dns-сервера не в моей компетенции. 2. Мне нужно по ip-адресу получить имя и домен хоста. От nbtstat я хотел получить имя, по которому 100% даст ответ nslookip, потому что см п. 1
#3 by ЧеловекДуши
А позвольте поинтересоваться, каков конечный смысл сей задумки?
#4 by SiAl-chel
Инвентаризатор. Юзер задает диапазон ip-адресов (несколько площадок и доменов через VPN). А всякие там запросы  к SQL-, 1С-, файл-серверам осуществлятся по имени, ip-адрес не для всех случаев пдходит. Да и имя компа/сервера больше даст юзеру информации, чем его ip-адрес.
#5 by ЧеловекДуши
Я думал, что Диапазон ИП адресов уже известен заранее, нет? :) Сея задумка работает только под доменным правом Администратора :) файл stat.bat: Код:     а теперь делаем cmd и пишем в него: Код:     for /L %i in (1,1,255) do stat.bat 192.168.0.%i>>c:11.log где 192.168.0.%i - маска сети. Вот вам информация по скрипту Вот как пользоваться гугл :)
#6 by PuhUfa
А позвольте поинтересоваться... >> Инвентаризатор. Юзер задает диапазон ip-адресов (несколько площадок и доменов через VPN). зачем это пользователю 1С? -)
#7 by SiAl-chel
Спасибо, но дело в том, что в батнике nbtstat работает, работает и в VBScript через Wscript.Shell.Run, а вот внутри 1С через Wscript.Shell.Run - не работает. Использую Wscript.Shell.Run для того, чтобы окно CMD не моргало при каждом вызове nbtstat. Думал может кто-то из сообщества сталкивался с некорректной работой Wscript.Shell.Run внутри 1С и знает как ее победить. А разве пользователями базы 1С не могут быть программеры 1С, у которых голова идет кругом от зоопарка шар, каталогов, серверов, на которых лежат и крутятся файловые и SQL версии 1С версии 7.7 и 8.
#8 by ЧеловекДуши
Каждый вызов? Шутите? У вас, чего ПК уносят и приносят? :)
#9 by ЧеловекДуши
+ Регламентным заданием. Раз в 7 дней :) Или как то так, в зависимости от полученного опроса сети.
#10 by ЧеловекДуши
Не работает на х64 сервере :)
#11 by SiAl-chel
Причем тут это? В конторе куча подсетей, расположенных вразных города, соединенных через VPN, и за раз запускать сканирование по всем компам - глупо.  Так что список адресов, диапазонов адресов, подсетей с маскй юзер обработки может указать произвольно. Список адресов из указанных юзером диапазонов адресов я получил. Через Win32_PingStatus проверил наличие хоста в сети. А вот через nslookup <ip>  я не всегда могу получить информацию о домене и имени хоста.
#12 by SiAl-chel
Это не критично. Сканирование запускается юзером с рабочей станции.
#13 by ЧеловекДуши
Я к тому, что зачем вообще пользователю это указывать и запускать руками? :) Выстраиваешь регламентное задание. Продумываешь, когда и во сколько, и как именно запускать сканирование :) Администратор только смотрит в отчет и некий анализ изменения :)
#14 by ЧеловекДуши
Вот я и хочу удивиться, у вас Администратору более делать нечего? Чем бессмысленное сканирование запускать, как попугай с одним и тем же интервалом времени :)
#15 by ЧеловекДуши
>>> я не всегда могу получить информацию о домене и имени хоста Все же некоторая информация вам всегда известна. Тольок нужно правильно её заполнять :)
#16 by SiAl-chel
, Причем тут регламент? Сценарий работы вообще другой. Хочется например узнать какие есть каталоги с базами 1С 7.7 и когда последний раз их использовали.  Есть несколько площадок, в каждой своя подсеть. Все соединено через VPN. Пользователь указывает диапазон адресов, получает из диапазона пингующиеся хосты, потом получает их dns-имена. А потом уже идет сканирование шар, каталогов, получение сервера и имени базы, если база SQL, и подключение к серверу SQL, чтобы проверить наличие базы на сервере SQL. Это один из сценариев. Проблема в том, что я не хотел заморачиваться с nbtstat, но не во всех dns-серверах резолвятся имена из ip-адреса. А вот nbtstat всегда имя возвращает, которе я и хочу использовать в команде nslookup.
#17 by ЧеловекДуши
У вас что всегда что-то меняется? Пользователи сами эти БД штампуют? Абы как и Абы где? ... Логичней предположить, что и хранить стоит сею информацию, что бы было с чем сверять :) Да про ВПН я понял, не зацикливайся, ВПН, это всего лишь некая фишка, которая позволяет всем работать как бы в одном сетевом пространстве, + типо что-то шифрует (но сей момент детали) :) ... >>> А потом уже идет сканирование шар Не хотите понять, что сей труд бессмыслен и беспощаден. И его можно автоматизировать. Ваше право. :) И в конечном счете СисАдмина будут интересовать только отклонения от того, что было сканировано Вчера, а не программный состав в сию минуту. :)
#18 by PuhUfa
Есть подозрение что на nbtstat нехватает прав Выполни: WSh = Новый COMОбъект("WScript.Shell"); Запуск = "%comspec% /K nbtstat -A 192.168.77.77 > C: btstat.txt";
#19 by Мэс33
А дальше что 1С будет делать с полученными данными?
#20 by SiAl-chel
Да, инфраструктура - живая вещь. Админы запускают новые физические и виртуальные серверы, убирают старые или сломавшиеся, программеры 1С создают новые базы для "погонять" и для работы по пожеланиям пользователей, или наоборот их переносят, удаляют. Какие-то базы "зависают", так как люди приходят и уходят, а последующие не знают или не помнят что это за базы и зачем они нужны. Задача вообще не для сисадмина, а скорее для админов БД, программеров 1С. Попробую. Но если параметр /K и 1 в о втором параметре Run показывают окно CMD, от чего и нужно избавиться. Так как иначе я вообще бы использовал КомандаСистемы. Имена хостов бы использовал для подключения к сетевым шарам, серверам 1С 8 или к SQL-серверам.
#21 by Мэс33
По мне - странный способ использовать под это дело 1с.
#22 by PuhUfa
/К с параметром 1 в Run покажет тебе тебе окно CMD в котором написано: "nbtstat" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
#23 by SiAl-chel
Попробовал. Выдает что "nbtstat не является внутренней или внешней командой..."
#24 by PuhUfa
о чем и речь...
#25 by SiAl-chel
Как это можно победить? В CMD nbtstat работает нормально, в VBScript тоже работает. С запуском nslookup через Wscript.Shel.Run проблем нет.
#26 by SiAl-chel
Меня устраивает 1С. Да и спецов по 1С больше, чем по всяким скриптовым языкам.
#27 by PuhUfa
если бы я знал, я бы написал сразу. У меня пока тоже не взлетает. При этом PAHT, там же, выдает правильные пути... и всякие ping, netstat тоже работают. Не видит почему то исключительно nbtstat
#28 by Мэс33
А если запускать батник (cmd`шник), а не саму команду
#29 by SiAl-chel
Значит коллеги по несчастью. Сейчас хочу пробовать запуск nbtstat через Vbscript внутри MSScriptControl.ScriptControl
#30 by SiAl-chel
Буду пробовать.
#31 by SiAl-chel
То есть для . И когда уже сделают редактирование сообщение, блин, на форуме?
#32 by Мэс33
и 1Ску запустить с правами админа.
#33 by Мэс33
не коллега. Я не юзаю скрипты через 1С ))). Вам же главное потом получить этот результат C: btstat.txt ?
#34 by SiAl-chel
Да. Мне нужно из StdOut nbtstat -A <ip> вытащить имя хоста.
#35 by SiAl-chel
Всё. Тема закрыта. Для получения имени можно использовать команду ping -a <ip-адрес> Команда возвращает либо DNS-имя, если есть возможность, или WINS-имя.
#36 by Serginio1
Можно  запустить процесс и прочитать вывод консоли private void run_cmd(string cmd, string args)     {         ProcessStartInfo start = new ProcessStartInfo;         }     }
#37 by SiAl-chel
Не хотелось бы использовать ВК или прочее дополнительное ПО, окромя возможностей ОС и платформы 1С.
#38 by SiAl-chel
Нашел более удобный способ - использовать Win32_PingStatus. Главное условие - включить ResolveAddressNames. Условие = "";
#39 by SiAl-chel
+ Вместо Для АдресIP из АдресаIP Цикл читать Для Каждого АдресIP из АдресаIP Цикл
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С