У меня есть VBScript, который проверяет на существование файла в каталоге на удаленной машине. Я надеюсь получать "Версию продукта" для упомянутого файла (НЕ "Версия файла"), но я, может казаться, не выясняю, как сделать это в VBScript.
Я в настоящее время использую Scripting.FileSystemObject
проверять на существование файла.
Спасибо.
Вы можете использовать Shell.Namespace , чтобы получить расширенные свойства файла, одним из которых является Версия продукта. Функция GetDetailsOf должна работать. Чтобы получить представление, вы можете протестировать следующий код:
Dim fillAttributes(300)
Set shell = CreateObject("Shell.Application")
Set folder = shell.Namespace("C:\Windows")
Set file = folder.ParseName("notepad.exe")
For i = 0 to 299
Wscript.Echo i & vbtab & fillAttributes(i) _
& ": " & folder.GetDetailsOf(file, i)
Next
Одна вещь, о которой следует помнить:
Расширенные свойства файла различаются в зависимости от версии Windows. Следовательно, индексные номера версий продукта меняются в зависимости от используемой вами версии Windows. Вы можете использовать приведенный выше код, чтобы определить, что они собой представляют. По результатам моего тестирования я считаю, что они следующие:
Вам также может оказаться полезным следующий пост .
Я не думаю, что это можно сделать в vbScript. Я могу ошибаться.
Вот ссылка на сценарий powershell, который делает то, о чем вы спрашиваете.
Вот как выглядит вывод для моего windows dir.
PS Scripts:\> ls c:\windows\*.exe | .\get-fileversion.ps1
ProductVersion FileVersion FileName
-------------- ----------- --------
2.7.3.0 2.7.3.0 C:\windows\agrsmdel.exe
Я использую функцию, которая немного изменена по сравнению с предыдущим примером. Функция берет путь и имя файла и возвращает «версию продукта»
Function GetProductVersion (sFilePath, sProgram)
Dim FSO,objShell, objFolder, objFolderItem, i
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sFilePath & "\" & sProgram) Then
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(sFilePath)
Set objFolderItem = objFolder.ParseName(sProgram)
Dim arrHeaders(300)
For i = 0 To 300
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)
If lcase(arrHeaders(i))= "product version" Then
GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)
Exit For
End If
Next
End If
End Function
. Я обнаружил, что положение атрибутов иногда изменяется (не знаю почему) в XP и Vista, поэтому я ищу атрибут «версия продукта». и выйдите из цикла, как только он будет найден. Закомментированная строка покажет все атрибуты и значение, если они доступны