1

Тема: VBS: Объект FileSystemObject (GetFileVersion) на удаленном компьютере

Доброго Всем времени суток!
Помогите решить одну проблему:
на удаленном компе необходимо получить версию exe-файла. Комп не в домене, поэтому подключиться можно только с указанием логина/пароля.

strComputer = "10.20.30.40" 
strLogonName = "Администратор" 
strPassword = "1234"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Set objSWbemServices = objSWbemLocator.ConnectServer (strComputer, "root\CIMV2", strComputer & "\" & strLogonName, strPassword) 
objSWbemServices.Security_.ImpersonationLevel = 3

это всё проходит , дальше я посчитал, что получить версию файла можно при помощи FSO.GetFileVersion()
Но тут затык. Как получить ссылку на FSO удаленного компа?
Конструкция примерно такого вида:

Set fso = objSWbemServices.Get("FileSystemObject")

не работает.
Какой объект нужно указать в .Get ? Если вообще надо его использовать. Или я пространство имен не то указал, и вместо root\CIMV2 надо что-то другое?
Или ход моих мыслей вообще неправильный?

Спасибо. Извините за сумбурность изложения. Я только учусь (с)

Я - фольклорный элемент!

2 (изменено: Dmitrii, 2012-11-01 21:49:49)

Re: VBS: Объект FileSystemObject (GetFileVersion) на удаленном компьютере

Пока что у Вас получился "винегрет". А здесь требуется "раздельное питание".
Для решения задачи с помощью WMI используйте класс CIM_DataFile. У него есть свойство Version.
Для решения задачи с помощью модели FSO сначала присоедините том, на котором хранится файл, в качестве сетевого диска. Используйте метод MapNetworkDrive объекта WshNetwork (технология WSH).

3

Re: VBS: Объект FileSystemObject (GetFileVersion) на удаленном компьютере

Доброго Всем времени суток!
Сделал через MapNetworkDrive, заработало и даже довольно шустро. Спасибо Dmitrii! :)

А вот этот код отрабатывает без ошибок, но возвращает NULL :|

strComputer = "10.20.30.40" 
strLogonName = "Администратор" 
strPassword = "1234" 
Set objSWbemServices = objSWbemLocator.ConnectServer (strComputer, "root\CIMV2", strComputer & "\" & strLogonName, strPassword) 
objSWbemServices.Security_.ImpersonationLevel = 3 
Set wmio = objSWbemServices.ExecQuery("Select * from CIM_Datafile where name='C:\\Program Files\\SRCC\\Terra.exe'")
For Each t In wmio
    Debug.WriteLine t.version
Next

я пользуюсь VbsEdit'ом, там подсказки всякие, вываливается список доступных свойств и методов, но version нету :(
Хотя, повторюсь, скрипт выполняется без ошибок.
Может не так обращаюсь к этому свойству?

Спасибо!

Я - фольклорный элемент!

4

Re: VBS: Объект FileSystemObject (GetFileVersion) на удаленном компьютере

Мне кажется, что проблема в подключении. Попробуйте проверить наличие объекта objSWbemServices после его объявления.
Кстати, что-то не видно в Вашем скрипте строки, которая была раньше:

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")

На локальной машине свойство "version" выбирается, например:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDFiles = objWMIService.ExecQuery _
	("Select * from CIM_Datafile where name='c:\\Program Files\\Total Commander\\Totalcmd.exe'")

For Each objDFile in colDFiles
    Wscript.Echo "Name: " & objDFile.Name
    Wscript.Echo "Ver.: " & objDFile.version
Next
WBR. Roman

5

Re: VBS: Объект FileSystemObject (GetFileVersion) на удаленном компьютере

Rom5
Извините, когда редактировал ответ - упустил эту строку. В коде она есть. Код работает.
Но! t.version возвращает NULL
t.DateCreated - вызывает ошибку, "Объект не поддерживает это свойство или метод"
t.name и t.extension  возвращают полное имя файла и расширение.

непонятно...
Но проблема решена

Я - фольклорный элемент!