Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2014, 15:42
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Delphi и VBS

Доброго времени суток.
Нужен совет. Есть VBS скрипт который собирает информацию о компьютерах(локальном/удаленном) по имени или IP адресу. Всю информацию он записывает в файл. Я нашел способ запустить этот скрипт из Delphi и даже как получить единичные значения результата его работы, но возникла другая проблема, как можно получить из скрипта массив, грубо говоря список локальных дисков. Подскажите пожалуйста.
Ответить с цитированием
  #2  
Старый 26.08.2014, 16:23
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от AngelNine
Есть VBS скрип как ... получить .... список локальных дисков. Подскажите пожалуйста.
Есть чёрный ящик, как из него достать слиток золота. Подскажите пожалуйста (С)
Ответить с цитированием
Этот пользователь сказал Спасибо Uniq! за это полезное сообщение:
Freeman (27.08.2014)
  #3  
Старый 26.08.2014, 17:41
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Uniq!
Есть чёрный ящик, как из него достать слиток золота. Подскажите пожалуйста (С)
Спасибо Ваш ответ был весьма полезен!
Ответить с цитированием
  #4  
Старый 26.08.2014, 18:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от AngelNine
Я нашел способ запустить этот скрипт из Delphi и даже как получить единичные значения результата его работы
через IScriptControl, надеюсь? тогда смотри его методы Eval, ExecuteStatement, Run.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 27.08.2014, 09:45
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
через IScriptControl, надеюсь? тогда смотри его методы Eval, ExecuteStatement, Run.
Извините, я немного не правильно поставил вопрос, не совсем точно.
Конструкцию для запуска скрипта я использую
Код:
  sc:=CreateOLEObject('MSScriptControl.ScriptControl');
  SC.Language:='VBScript';
  SC.Timeout:=-1;
  SC.AllowUI:=True;
  SC.ExecuteStatement(Memo1.Text);
На данный момент я получил такуб конструкцию с помощью которой можно вернуть из скрипта с помощью Eval значение
Код:
Dim Name1(10, 5)
'Name1=Array(1,2,3)
Dim i
i=0
Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & "eoi-004-06" & "\Root\CIMV2")
'Set Name1 = wmio.ExecQuery("Select * from Win32_LogicalDisk")
    For Each objItem in wmio.ExecQuery("Select * from Win32_LogicalDisk WHERE DriveType = 3 AND Size IS NOT NULL")
        Name1(i, 0)=objItem.Name
        Name1(i, 1)=objItem.FileSystem
        Name1(i, 2)=objItem.Size
        Name1(i, 3)=objItem.FreeSpace
        Name1(i, 4)=objItem.VolumeSerialNumber
        i=i+1
    Next
но она слишком большая и это только информация о локальных дисках. И получается что при сборе всей информации код получается слишком большой. Можно ли как то упростить данную конструкцию и передать в программу Delphi сразу всю структуру которую возвращает
Код:
wmio.ExecQuery("Select * from Win32_LogicalDisk WHERE DriveType = 3 AND Size IS NOT NULL")
Ответить с цитированием
  #6  
Старый 28.08.2014, 03:06
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Вроде к WMI можно как-то подключаться через ADO.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #7  
Старый 28.08.2014, 18:50
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

так перепиши скрипт сразу в Delphi:
Цитата:
objLocator:=CreateOleObject('WbemScripting.SWbemLo cator') as ISWbemLocator;
objServices:=objLocator.ConnectServer('', 'root\CIMV2', '', '', '', '', 0, nil)
и понеслась...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 29.08.2014, 09:57
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Всем спасибо действительно решение было намного проще, после длительного гугления была найдена библиотека WbemScripting_TLB которая неплохо справляется с необходимой задачей, но возникла небольшая проблема.В определенные моменты, по непонятной причине появляется следующая ошибка
Код:
Could not convert variant of type (Dispatch) into type (String)
. На данный момент она появляется при попытке получить информации о видеоадаптере и сетевых интерфейсах, На сетевых интерфейсах он не может обработать IP адрес, а видеоадаптерах на некоторых машинах о названии видео процессора и объеме памяти. Может кто сталкивался и может подсказать как это обойти?
Ответить с цитированием
  #9  
Старый 29.08.2014, 10:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Ну не может тип интерфейс к строке преобразоваться, проверяй тип варианта
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 29.08.2014, 10:54
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Ну не может тип интерфейс к строке преобразоваться, проверяй тип варианта
Я понимаю суть ошибки, но почему на некоторых компах он возвращяет нормально данные а иногда этот интерфейс? И как можно проверить что он вернул?

Последний раз редактировалось AngelNine, 29.08.2014 в 10:57.
Ответить с цитированием
  #11  
Старый 29.08.2014, 10:58
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

VarType функция
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 29.08.2014, 11:06
AngelNine AngelNine вне форума
Прохожий
 
Регистрация: 08.08.2014
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А выяснить почему так происходит можно как то выяснить?
Все данные возвращаются в формате varDispatch((( Но большую часть он конвертирует нормально, а не которые нет...

Последний раз редактировалось AngelNine, 29.08.2014 в 11:20.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter