|
Сменить кодировку ответа команды ping | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
14.11.20
✎
15:14
|
Есть у меня такаю функция:
// Возвращает Истина, если пингуется IP-адрес // v8: Как средствами 1C проверить ping (Ping monitor)? Функция PingIP_Адреса(IP_Адрес = "", ТекстСообщения = "") Экспорт Если ПустаяСтрока(IP_Адрес) Тогда Возврат Ложь; ИначеЕсли IP_Адрес = НРег(СокрЛП(ИмяКомпьютера())) Тогда Возврат Истина; КонецЕсли; objShell = Новый COMОбъект("WScript.Shell"); objScriptExec = objShell.Exec("ping.exe -n 1 " + IP_Адрес); strPingResults = НРег(objScriptExec.StdOut.ReadAll()); Результат = Найти(strPingResults, "ttl=") > 0; ТекстСообщения = ?(Результат, ТекстСообщения, ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, "IP-адрес", "Компьютер") + ": '" + ВРег(IP_Адрес) + "' - недоступен!"); IP_Адрес = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, IP_Адрес, ?(Найти(strPingResults, "[") = 0, "", Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "[") - 1))); Возврат Результат; КонецФункции // PingIP_Адреса() На входе ИмяКомпьютера, если компьютер доступен в сети (подключился не удаленно), возвращает Истина, преобразует ИмяКомпьютера в его IP_Адрес. Много лет работала, а сегодня strPingResults выдает: џаё їа®ўґаєґ бўп§ё ґ г¤ «®бм ®ў аг¦ёвм 㧴« mv-win10. џа®ўґамвґ ё¬п 㧫 ё ї®ўв®аёвґ ї®їлвєг. - даже цифр нет!? |
|||
64
NorthWind
16.11.20
✎
19:26
|
(63) Попробуйте
> Адрес = objStatus.ProtocolAddress; вместо > Адрес = objStatus.ProtocolAddressResolved; |
|||
65
Mikhail Volkov
16.11.20
✎
19:37
|
(64) Получилось, спс!
|
|||
66
Mikhail Volkov
17.11.20
✎
07:03
|
С WMI сталкиваюсь впервые, случись что, поправить не смогу...
(56) В твоем варианте: Shell.Run("ping -n 1 -w 400 " + ИмяКомпьютера, 0, Истина), если компьютер доступен, результат 0. Возможно получить его IP-адрес без мигания черного окна? |
|||
67
NorthWind
17.11.20
✎
09:03
|
Вариант, как избежать консольного окна, вам дали еще в (39). Но как бы очевидно, что делать это вы не будете.
То есть вы и с запуском процесса не особо хотите разбираться. Ну и какая разница, в чем вы не разбираетесь? :))) |
|||
68
Mikhail Volkov
17.11.20
✎
09:14
|
(67) Пытаюсь разобраться, возможно ли получить IP-адрес? В постах (56) не нашел ответа.
|
|||
69
NorthWind
17.11.20
✎
09:23
|
(68) Если через вызов программы - тогда только разбирая вывод пинга.
что довольно муторно и чревато ошибками, если вывод по какой-то причине поменяется - в этом случае разборщик может ошибиться. Я бы не стал этого делать. |
|||
70
Mikhail Volkov
17.11.20
✎
09:41
|
(69) > Если через вызов программы - тогда только разбирая вывод пинга.
В (0) уже сделано: Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "[") - 1)), только как strPingResults получить? В (0) получаю objScriptExec.StdOut.ReadAll(). |
|||
71
NorthWind
17.11.20
✎
09:50
|
(70) Shell.Run, насколько я знаю, не позволяет перенаправлять стандартный ввод-вывод, соответственно, с его помощью вывод программы вы не заберете для парсинга.
Для этого годится только Shell.Exec. Соответственно, выходит что нужно делать вариант (25), но, чтобы избежать вывода консольного окна, придется завернуть все это в VBS-скрипт по совету из (39). |
|||
72
Mikhail Volkov
17.11.20
✎
10:18
|
(71) Как завернуть все это (25) в VBS-скрипт?
|
|||
73
NorthWind
17.11.20
✎
10:56
|
(72) Через MSScriptControl.ScriptControl, например, можно попробовать. Но с этим будут проблемы на 64-битной 1С.
Можно скрипт сохранить как временный файл и натравить на него wscript.exe, правда, я не исключаю что тут опять вылезет окно, и кроме того, непонятно как отдать результат. В общем, хрен его знает. Я точно не буду заниматься подобными извращениями, потому что есть рабочий вариант (60), простой и понятный. |
|||
74
mistеr
17.11.20
✎
12:28
|
(72) Вот vbs обертка для произвольного батника
Dim shell,command ScriptDir = WScript.ScriptFullName ScriptDir = Left(ScriptDir, Len(ScriptDir) - Len(WScript.ScriptName)) command = "cmd.exe /c " & ScriptDir & "ping_test.cmd" Set shell = CreateObject("WScript.Shell") shell.Run command,0 "ping_test.cmd" заменить на имя вашего батника, лежащего рядом с оберткой. |
|||
75
Mikhail Volkov
17.11.20
✎
13:21
|
(74) Куда писать эту vbs-обертку, 1С поймет это? Батник отдельным файлом должен лежать? Какой он должен быть, чтобы формировал ответ на команду: "ping.exe -n 1 " + ИмяКомпьютера, что-то типа (9) или (10)?
|
|||
76
lEvGl
гуру
17.11.20
✎
13:23
|
Микхаил...
|
|||
77
mistеr
17.11.20
✎
13:58
|
(75) Если хочешь парсить вывод, то да батник отдельным файлом, в нем две строки, chcp и ping.
|
|||
78
mistеr
17.11.20
✎
13:59
|
А вообще, если посмотреть шире, на удаленном хосте какой сервис интересует? Если HTTP, то по HTTP и пингуй. В 1С все есть, не надо возиться с батниками.
|
|||
79
Mikhail Volkov
17.11.20
✎
14:03
|
(51) > чем (34) не устраивает? три строки кода
Да, и черное окно не мелькает, но только определяет доступность компьютера. А IP-адрес - нет. Думал не сложно добавить, а оказалось... |
|||
80
Mikhail Volkov
17.11.20
✎
14:14
|
(78) В Альфа-Авто 4.1 вроде нет HTTP сервиса. Функцию PingIP_Адреса() писал с появлением онлайн-кассы общей в использовании. Потом ее использовал еще где-то.
|
|||
81
mistеr
17.11.20
✎
14:22
|
(80) Ты не понял наверное. Я спрашиваю, ты сейчас конкретный хост с какой целью мониторить хочешь? Чтобы потом использовать какой-то сервис на этом хосте. Какой?
|
|||
82
Mikhail Volkov
17.11.20
✎
14:37
|
(81) Ничего не хочу мониторить. В последний раз смотрел ее отладчиком при подключении удаленного пользователя, увидел абракадабру, засомневался...
|
|||
83
mistеr
17.11.20
✎
14:41
|
(82) А, понятно. Может быть она и "много лет" неправильно работала...
|
|||
84
lEvGl
гуру
17.11.20
✎
14:43
|
доменную авторизацию он мониторит и попутно видимо еще какая история с входом в домен и доступностью машин, может имена компов и их адреса в актуальном состоянии поддерживать хочет, в целом админская хрень какая то
|
|||
85
Mikhail Volkov
17.11.20
✎
14:55
|
(84) У удаленных пользователей бывают проблемы с онлайн-кассой, поэтому в ЖР пишется как он зашел, с какого компьютера. К функции (0) не было нареканий, кроме мелькания черного окна.
|
|||
86
lEvGl
гуру
17.11.20
✎
14:57
|
+ (85) кроме мелькания черного окна и албанского языка
|
|||
87
Mikhail Volkov
17.11.20
✎
15:16
|
(86) Абракадабра не мешает, фрагмент "ttl=" не искажается, просто засомневался при отладке.
|
|||
88
Mikhail Volkov
17.11.20
✎
18:12
|
В теме v8: Ошибка выполнения команды WshShell.Run приводится такой фрагмент:
WshShell = новый ComОбъект("WScript.Shell"); RetCode = WshShell.Run("команда",0,Истина).StdOut; Сообщить(RetCode); У меня ошибку дает: Значение не является значением объектного типа (StdOut)? |
|||
89
NorthWind
17.11.20
✎
18:34
|
(88) Нет там .StdOut. Не путайте с Exec. См. (71), я там об этом писал уже.
|
|||
90
Mikhail Volkov
17.11.20
✎
18:51
|
(89) Да, видимо там ошибочно так написано.
|
|||
91
Mikhail Volkov
18.11.20
✎
08:02
|
> Скрипты лучше выполнять непосредственно движком, без всяких файлов. (Запуск "*.vbs" из 7.7... проблема)
Еще бы таких примеров, чтобы понять как пишутся VBS-скрипты без bat-файлов... |
|||
92
NorthWind
18.11.20
✎
08:59
|
(91) лучше-то лучше. Но нужно иметь в виду, что эта штука (ScriptControl) есть только x32.
Соответственно, если планируется переходить или использовать x64 клиентов или выполнять на сервере, то могут быть траблы. |
|||
93
NorthWind
18.11.20
✎
09:01
|
вообще, конечно, раздуть такую хрень на сто постов из-за того чтобы комп попинать/адрес отрезольвить - это только 1Сники могут :) Там где нормальные программисты бы все давно сделали встроенными библиотеками, тут на полном серьезе двое суток обсуждается как ping.exe запустить :))))
|
|||
94
Mikhail Volkov
18.11.20
✎
09:15
|
(92) Альфа-Авто x64 (не УФ), но клиентская часть 32-разрядная, иначе торговое оборудование не работает.
(93) VBS-скриптами и bat-файлами почти не пользуюсь, не разбираюсь... время есть, пытаюсь разобраться. |
|||
95
NorthWind
18.11.20
✎
09:23
|
(94) ну если на 32-битность плевать, то можно попытаться сделать как написано в 6-м посте по ссылке в (91).
|
|||
96
Djelf
18.11.20
✎
09:31
|
(93) Так сделали уже http://catalog.mista.ru/public/975147/
|
|||
97
NorthWind
18.11.20
✎
09:41
|
(96) кстати, (0) это тоже могло бы быть интересно, тем более что компоненту отдают бесплатно.
|
|||
98
Mikhail Volkov
18.11.20
✎
10:28
|
(97) Посмотреть бы ее, не скачивается...? А у тебя скачивается? Если Да, то перешли мне на [email protected]
|
|||
99
Djelf
18.11.20
✎
10:32
|
(98) В 3м сообщении ссылка на обработку, вк`шки внутри.
|
|||
100
Сияющий в темноте
18.11.20
✎
10:34
|
Имя компьютера в адрес это же DNS или WINS
причем тут пинг? nslookup может быть? |
|||
101
Сияющий в темноте
18.11.20
✎
10:35
|
если имя компьютера в сети windowd,то вообще локальный кеш имен.
|
|||
102
Mikhail Volkov
18.11.20
✎
10:38
|
(99) Нашел, Спс!
|
|||
103
NorthWind
18.11.20
✎
10:44
|
(100) ему нужно все в куче - по имени компа отрезольвить IP и проверить доступность этого IP.
В принципе, штатный пинг резольвит IP перед проверкой, поэтому такое пожелание ничему не противоречит. |
|||
104
acht
18.11.20
✎
10:55
|
(103) В общем случае это сильно разные задачи. FQDN и IP связаны как "многие ко многим". И это если еще не лезть в ipv4/ipv6, разные localhostы и отличия wins от dns.
Получит какой-нибудь [2a02:6b8:a::a] и общий сбой сети и прибежит опять вопросы задавать... |
|||
105
Mikhail Volkov
18.11.20
✎
11:26
|
(96) Вставил в свою функцию:
//Ping -- произвольное имя, под которым мы хотим видеть компоненту в 1С подключено = ПодключитьВнешнююКомпоненту("ВнешняяОбработка.ТестКомпоненты.Макет.Компонента32", "Ping", ТипВнешнейКомпоненты.Native); //пытаемся подключить 32бита Если Не подключено Тогда подключено = ПодключитьВнешнююКомпоненту("ВнешняяОбработка.ТестКомпоненты.Макет.Компонента", "Ping", ТипВнешнейКомпоненты.Native); КонецЕсли; темпл = Новый("AddIn.Ping.smiPingNativeExtension"); темпл.Address = IP_Адрес; темпл.PingCount = 5; темпл.Пинг(); Если Не темпл.ЕстьОшибка Тогда IP_Адрес = темпл.Адрес; Возврат Истина; КонецЕсли; ТекстСообщения = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, "IP-адрес", "Компьютер") + ": '" + ВРег(IP_Адрес) + "' - недоступен!"; Возврат Ложь; Получил ошибку: Тип не определен (AddIn.Ping.smiPingNativeExtension) темпл = Новый("AddIn.Ping.smiPingNativeExtension"); Как в 1м сообщении ссылки на обработку, вк`шки внутри. А в 4м он же сообщает: Проверил, обработка во вложении работает. Почему? |
|||
106
Mikhail Volkov
18.11.20
✎
11:56
|
+ В УФ (КА2 на 8.3.16.1359) работает, без ошибок! А на обычных формах в 8.3.10.2466 - нет. От платформы зависит?
|
|||
107
Mikhail Volkov
18.11.20
✎
12:37
|
+ Переписал обработку на обычные формы, запускаю на 8.3.16.1359, и та же ошибка: Тип не определен (AddIn.Ping.smiPingNativeExtension)!?
Но вернемся к вопросу (72): Как завернуть код (0) в VBS-скрипт? |
|||
108
Mikhail Volkov
18.11.20
✎
13:36
|
+ А нет, макеты не перенес, перенес: работает! А как их мне перенести в свою конфигурацию? Ладно, не надо, все равно не буду ее использовать... Сейчас через WMI (29) работает (непонятно как, случись что, поправить не смогу...). Хочется понять: Как завернуть код (0) в VBS-скрипт?
|
|||
109
NorthWind
18.11.20
✎
14:30
|
(104) ну это в общем. В простейшей локалке обычно 1:1. Если ему NSLookup вернет несколько, он один хрен возьмет первый попавшийся.
|
|||
110
Mikhail Volkov
18.11.20
✎
14:54
|
В (74) дали vbs-обертку для произвольного батника. Не понял: куда ее писать, прямо в модули 1С, 1С поймет это? Или vbs-обертку надо писать отдельно, в виде батника? И как ее запускать из 1С?
(95) Допустим не хочу писать батник (не знаю что писать, кроме: "ping.exe -n 1 " + ИмяКомпьютера), и написал прямо в модуле 1С как Запуск "*.vbs" из 7.7... проблема. Как мне запустить эту vbs-обертку в 1С? |
|||
111
mistеr
18.11.20
✎
15:12
|
(96) "Сырые сокеты", права админа, ну нафиг.
|
|||
112
NorthWind
18.11.20
✎
15:20
|
(110)
Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl"); Скрипт.Language = "vbscript"; КодНаБейсике = "Function Ping (Name) | Set Cmd = CreateObject(""WScript.Shell"") | Set WshExec = Cmd.Exec (""cmd.exe /q /k echo off"") | WshExec.StdIn.WriteLine ""chcp 1252>nul"" | WshExec.StdIn.WriteLine ""ping -n 1 "" & Name & "" "" | WshExec.StdIn.WriteLine ""exit"" | Ping = WshExec.StdOut.ReadAll() |End Function"; Скрипт.AddCode(КодНаБейсике); СтрокаДляРазбора = Скрипт.Run ("Ping", "srv-02"); Сообщить (СтрокаДляРазбора); Толку только от этого чуть. Окно никуда не девается. |
|||
113
NorthWind
18.11.20
✎
15:21
|
так что все же я бы на вашем месте перестал бы сношать голову, а пользовался бы WMI
|
|||
114
Djelf
18.11.20
✎
15:32
|
(111) А теперь прочти внимательнее что автор ВК написал. Ты же все наоборот прочитал ;)
|
|||
115
mistеr
18.11.20
✎
15:53
|
(114) Ага, прочел внимательно, спасибо.
Автору ВК советую пройти курс "Как ясно выражать свои мысли в письменной форме". |
|||
116
Mikhail Volkov
18.11.20
✎
16:26
|
(111) У меня не УФ, см. (108).
(112) Черное окно на: СтрокаДляРазбора = Скрипт.Run ("Ping", "srv-02"); А почему: Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl"); а не WshShell = новый ComОбъект("WScript.Shell"); Тогда наверное можно: WshShell.Run("СтрокаКоманды",0,Истина); без черного окна? |
|||
117
Mikhail Volkov
18.11.20
✎
18:32
|
(116) Нет, тут (112) WshShell = новый ComОбъект("WScript.Shell"); не работает. Тогда VBS скрипты, написанные в 1С, работают всегда с миганием черного окна?
(39) > Можно убрать, если обернуть в VBS скрипт. То есть схема такая: через WScript.Shell запускаешь VBS скрипт, в нем запускаешь cmd и ставишь признак скрыть окно, в cmd запускаешь chcp + ping. Только при выполнении батников или cmd можно скрыть мигание черного окна? |
|||
118
acht
18.11.20
✎
18:34
|
А у меня это окошко синее...
|
|||
119
NorthWind
18.11.20
✎
19:03
|
(116) ну раз можно - так сделайте.
|
|||
120
Mikhail Volkov
18.11.20
✎
19:28
|
(119) Два VBS скрипта?
|
|||
121
NorthWind
18.11.20
✎
19:51
|
(120) Вы так и не поняли ничего... Run можно сделать без черного окна, он это позволяет. Но используя Run, вы не прочитаете вывод команды ping. Если же использовать Exec, то прочитать вывод получится, но не удастся избавиться от консольного окна, во всяком случае относительно естественными способами.
|
|||
122
NorthWind
18.11.20
✎
19:54
|
в примере (112) я загнал все в отдельный скрипт и выполнил его, используя ScriptControl. Это ничего не дало - как только дело дошло до выполнения пинга, все равно появилось окно, которое пропало после завершения программы.
|
|||
123
Mikhail Volkov
18.11.20
✎
20:02
|
(121) Не стоит и пытаться применять VBS скрипты, все равно не избежать мигание черного окна для получения IP-адреса?
|
|||
124
ДедМорроз
18.11.20
✎
20:17
|
Я чего то может не понимаю
Батник в невидимом окне запускать получается,в батник вывод перенаправить в файл тоже получается,тогда зачем вообще огороды с StdOut городить? |
|||
125
Mikhail Volkov
18.11.20
✎
20:21
|
(124) А как сделать, чтобы его не было?
|
|||
126
NorthWind
18.11.20
✎
20:32
|
(125) перенаправить в файл на диске можно. Потом файл в 1С открыть и прочитать... Если уж заниматься х...ней, то на полную катушку, че.
|
|||
127
Mikhail Volkov
18.11.20
✎
20:43
|
(126) > перенаправить в файл на диске можно. Потом файл в 1С открыть и прочитать...
Только так? Да, не стоит заниматься... |
|||
128
NorthWind
18.11.20
✎
22:12
|
Как думается, наиболее рациональный вариант для винды все-таки WMI. Скорее всего будет норм жить под все актуальные винды, с платформой 1С x64 проблем тоже быть не должно, нет извращений вроде запуска дополнительных программ, работает быстро, и короткий понятный код. Минус только один - с линухом не совместимо. Будь у меня подобная задача - я бы остановился на нем.
|
|||
129
Mikhail Volkov
19.11.20
✎
07:55
|
(126) Т.е. VBS-скрипт сначала надо записать в файл, и запускать этот файл скрытым? Это для всех VBS-скриптов, или только для получения IP-адреса?
(128) Тогда придется остановиться на варианте через WMI. Хотелось начать разбираться с VBS-скриптов. |
|||
130
Biker
19.11.20
✎
09:41
|
(28) вот почему не скачать бсп и не выдрать оттуда рабочую функцию?
|
|||
131
Mikhail Volkov
19.11.20
✎
09:59
|
(130) Там тоже черное окно возникает. И получения IP-адреса есть?
|
|||
132
Mikhail Volkov
19.11.20
✎
10:07
|
(112) Это всегда для написания скриптов так:
Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl"); Скрипт.Language = "vbscript"; КодНаБейсике =... |
|||
133
Mikhail Volkov
19.11.20
✎
16:24
|
+ А где посмотреть как правильно скрипты писать? А то в (112): Скрипт.Language = "vbscript"; а в Запуск "*.vbs" из 7.7... проблема: Скрипт.Language = "JScript"; Отчего это зависит?
|
|||
134
ДенисЧ
19.11.20
✎
16:28
|
Скрипт.Language = "vbscript"
Скрипт.Language = "JScript" Скрипач, ты дальтоник? Красный от зелёного, в смысле басик от жискрипта не отличаешь? |
|||
135
Mikhail Volkov
19.11.20
✎
16:48
|
(134) Понятно. Все же, где почитать? Чтобы не задавать подобных вопросов. На ИТС https://its.1c.ru/db/execdoc#content:10064:hdoc не нашел ничего толкового...
|
|||
136
ДенисЧ
19.11.20
✎
16:52
|
(135) Почитать что? Чем бейсик отличается от жискрипта? О_о
|
|||
137
ДенисЧ
19.11.20
✎
16:53
|
Кроме того... По твоей ссылке - экзекутор (первого ранга). А это не бейсик и не жискрипт... Это отдельный язык, если мне эклер не изменяет...
|
|||
138
NorthWind
19.11.20
✎
16:55
|
(135) не поверите - в гугле и яндексе. А примера по ссылке на мистовский топик, который тут был, вполне достаточно для того чтобы попробовать сделать что-то самому, первый раз в жизни увидев этот скрипт-контрол.
|
|||
139
Mikhail Volkov
19.11.20
✎
17:06
|
(138) Теорию...
В (112) Скрипт.Run ("Ping", "srv-02"); Ping - название функции, или ответ команды: WshExec.StdOut.ReadAll()? |
|||
140
ДенисЧ
19.11.20
✎
17:13
|
(139) Функция
|
|||
141
NorthWind
19.11.20
✎
18:37
|
(139) какая именно теория вам нужна - для чего может применяться в 1С? Гуглится за несколько минут, находится, например, тут https://www.script-coding.com/MSScriptControl.html
|
|||
142
Mikhail Volkov
19.11.20
✎
19:34
|
Переписал скрипт по примеру Как запустить скрипт VBS из 1с
СтрокаКоманды = "ping.exe -n 1 " + IP_Адрес; Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl"); Скрипт.Language = "VBscript"; ТекстСкрипта = " |Function Ping() |set WshShell=WScript.CreateObject(""WScript.Shell"") |WshShell.Run """ + СтрокаКоманды + """, 0, true |End Function"; Скрипт.AddCode(ТекстСкрипта); СтрокаДляРазбора = Скрипт.Run("Ping"); Пишет: Ошибка выполнения Microsoft VBScript: Требуется объект: 'WScript' - Что ни так? |
|||
143
NorthWind
19.11.20
✎
21:50
|
(142)
заместо |set WshShell=WScript.CreateObject(""WScript.Shell"") надо |set WshShell=CreateObject(""WScript.Shell"") |
|||
144
Mikhail Volkov
20.11.20
✎
00:01
|
(143) Спс, а в следующей строке: |WshShell.Run """ + СтрокаКоманды + """, 0, true - скобки нужны? Поскольку кавычек ставить? true заменить на 1? Сейчас ТекстСкрипта (см. отладчиком): "
Function Ping() set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run "ping.exe -n 1 PERSEUS", 0, true End Function" - Правильно? Ошибок нет, но СтрокаДляРазбора пустая? |
|||
145
Mikhail Volkov
20.11.20
✎
08:41
|
+ Скобки не дает добавить, пишет: (Ошибка компиляции Microsoft VBScript): Недопустимо использование скобок при вызове процедуры Sub. Без них должна что-то вернуть Скрипт.Run("Ping");? Если не ответ Ping, то хотя бы 0 (успех) или 1 (нет доступа). Но хотя бы не мигает черное окно консоли.
|
|||
146
NorthWind
20.11.20
✎
08:43
|
(144) Когда в бейсике делается вызов процедуры (Sub) - скобки не нужны.
True не надо ни на что менять, этот литерал в VBS допустим. Кавычки ставятся в соответствии с тем, что вы записываете код в строку 1С, внутри которой одинарные кавычки записываются как двойные. Чтобы у вас Function возвращала значение, перед строкой End Function надо написать строку возврата значения, например |Ping = 1 И тогда будет возвращаться единица. |
|||
147
Mikhail Volkov
20.11.20
✎
09:04
|
(146) Мне надо, чтобы Function возвращала ответ команды: ping.exe -n 1 ИмяКомпьютера. Как правильно писать?
|
|||
148
NorthWind
20.11.20
✎
09:19
|
(147) Бери мочало, начинай сначала... Чтобы возвращать стандартный вывод команды Ping, вам нужно использовать не Run, а Exec, и далее делать возврат свойства .StdOut
|
|||
149
Mikhail Volkov
20.11.20
✎
09:51
|
(148) И тут начнется мигание черного окна консоли!? Не тот вариант.
Остается только в СтрокаКоманды формировать батник (cmd-файл), а затем скриптом запускать его, и получать его ответ СтрокаДляРазбора. Так? |
|||
150
NorthWind
20.11.20
✎
10:15
|
(149) а какая разница - батник вы будете запускать или экзешник? Суть-то одна и та же - это консоль, есть консольное окно - считать вывод получается, нет окна - не получается.
|
|||
151
Mikhail Volkov
20.11.20
✎
10:37
|
(150) А как же (39) > Можно убрать, если обернуть в VBS скрипт. То есть схема такая: через WScript.Shell запускаешь VBS скрипт, в нем запускаешь cmd и ставишь признак скрыть окно, в cmd запускаешь chcp + ping.
|
|||
152
Mikhail Volkov
20.11.20
✎
10:46
|
+ Единственное что меня интересует: можно ли сперва сформировать текст cmd, но не писать его на диск. А затем (39)?
|
|||
153
NorthWind
20.11.20
✎
10:57
|
(151) ну если только так еще попробовать... Попробуйте, если есть время и желание.
(152) cmd на диск не писать нельзя. Не запишете на диск - нечего будет и выполнять. Покомандно содержимое cmd без записи на диск запустить можно, я это сделал в (112). Но такой вариант не дает эффекта, окно все равно появляется. |
|||
154
NorthWind
20.11.20
✎
11:02
|
||||
155
NorthWind
20.11.20
✎
11:04
|
там довольно кривой перевод с английского, но вообще статья дельная
|
|||
156
Mikhail Volkov
20.11.20
✎
11:33
|
(154) Скрыть окно строки при использовании Exec () - это возможно или только предположение? - не мой уровень, не дорос еще...
|
|||
157
NorthWind
20.11.20
✎
13:07
|
весь вопрос в нужности. Для данной конкретной задачи нет смысла этим заниматься, вообще никакого, потому что решение на WMI закрывает все текущие вопросы.
|
|||
158
Mikhail Volkov
20.11.20
✎
13:41
|
(157) Да, сейчас в рабочей базе работает через WMI. VBS-скрипты взялся смотреть лишь для их изучения. Но неудачный пример выбрал с командой Ping. Она всегда будет сопровождаться черным окном консоли, вопреки объяснениям (39).
Что-то УдавВПопугаях сюда не заглядывает, сперва он активно предлагал свой метод (31), но в нем не было получения IP-адреса... Пока всем откликнувшимся спс. Если когда продолжу, то новую тему открою. |
|||
159
mistеr
20.11.20
✎
14:08
|
(158) У меня (39) работало на ура без окна. Правда, не из 1С запускалось, а из Планировщика.
Просто нет времени вникать в твой случай, но метод рабочий. |
|||
160
Mikhail Volkov
20.11.20
✎
16:50
|
(159) Как понял из (150) особенность команды Ping в том, что она ответ дает в окно консоли. Из этой строка выделяем IP-адрес. Поэтому, если нужно выделить IP-адрес, то без окна консоли не обойтись.
|
|||
161
Сияющий в темноте
22.11.20
✎
19:54
|
показывать и не показывать окно консоли это не тоже самое,что создавать его или нет.
|
|||
162
Mikhail Volkov
23.11.20
✎
13:52
|
(161) Значит возможно? А как? Чего в (142) не хватает, как правильно?
|
|||
163
NorthWind
23.11.20
✎
14:08
|
(162) дык это не на тему сделать, это на тему высказать умную мысль %)
Насчет окна консоли это все понятно, но есть маленькая проблема - это не С/С++, где вы можете рулить всеми нюансами создания процесса. И даже не WMI, потому что вы не захотите разбираться, как работать с процессами на WMI. Это стандартные средства VBS. Там можно только то, что можно. Средства все описаны, в частности, в статье (154). Я уже говорил - сделать скорее всего можно, но для этого придется встать на ушки. Оно никому не надо, потому что денег за это все равно никто не заплатит, а посидеть придется. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |