Centrum skryptów - Systemy operacyjne

Jak mogę określić numer wersji pliku? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak mogę określić numer wersji pliku?

Cześć, Skrypciarzu! W jaki sposób mogę uzyskać informacje dotyczące wersji pliku DLL lub innego?

-- DM

Cześć, DM. Znamy co najmniej dwa sposoby uzyskania tych informacji: jeden z nich działa tylko na komputerze lokalnym, drugi zaś można zastosować również zdalnie. A że porządni z nas goście, przedstawimy oba rozwiązania.

Tak naprawdę dla porządku należałoby, aby Microsoft zapłacił nam za drugie rozwiązanie ekstra, ale to chyba sprawa beznadziejna, przedstawimy więc oba skrypty za darmo i powiemy, że to promocja.

Ale z chęcią przyjmiemy wszelką dodatkową płatność w czeku lub w gotówce…

Na początek wersja dla komputera lokalnego. Skrypt korzysta z obiektu FileSystemObject i zajmuje całe dwa wiersze kodu:

Set objFSO = CreateObject("Scripting.FileSystemObject")

Wscript.Echo objFSO.GetFileVersion("c:\windows\system32\scrrun.dll")

Jak widać, niewiele się tu dzieje (m.in. dlatego jest to nasz jeden z ulubionych skryptów). Proste: tworzymy wystąpienie obiektu FileSystemObject i wywołujemy echo wartości podanej przez metodę GetFileVersion. Wywołanie tej metody również nie jest szczególnie trudne; wystarczy wskazać interesujący nas skrypt – czyli, w tym wypadku, C:\Windows\System32\Scrrun.dll – a resztą zajmie się FileSystemObject.

Dlaczego zatem, skoro jest to takie łatwe, nie poprzestaniemy na poleceniu tego skryptu? Z dwóch powodów. Po pierwsze, obiekt FileSystemObject został stworzony z myślą o komputerach lokalnych; nie bardzo nadaje się więc do uzyskiwania informacji z komputerów zdalnych. (Niekiedy możliwe jest połączenie ze zdalnym komputerem jeśli poda się udział administracyjny: \\atl-ws-01\C$\Windows\System32\Scrrun.dll. Jednak nawet ta metoda nie zawsze skutkuje.)

I po drugie, metoda GetFileVersion jest w stanie zrobić tylko jedno: podać numer wersji pliku. (Chodzi tu przede wszystkim o pliki .dll lub .exe; zazwyczaj tylko one posiadają numer wersji.) Nie uzyska się więc w ten sposób żadnych informacji dodatkowych – o rozmiarze pliku czy dacie ostatniej modyfikacji; konieczne byłoby dodanie do naszego dwuwierszowego skryptu kodu umożliwiającego pobranie większej ilości informacji o właściwościach pliku.

Dlatego też do określenia wersji pliku użyć można WMI. Mechanizm WMI równie dobrze działa lokalnie, jak zdalnie; oprócz tego, klasa CIM_Datafile służąca do określenia wersji pliku może również podać wszystkie inne informacje dotyczące pliku. Jakie są wady? Skrypt WMI jest troszkę bardziej skomplikowany (ale tylko troszkę) i działa nieco wolniej niż skrypt z FileSystemObject. Poza tym oba skrypty działają tak samo: podają wersję określonego pliku.

Oto skrypt WMI podający wersję pliku C:\Windows\System32\Scrrun.dll:

strComputer = "."

            

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")



Set colFiles = objWMIService.ExecQuery _

    ("Select * from CIM_Datafile Where Name = 'c:\\windows\\system32\\scrrun.dll'")



For Each objFile in colFiles

    Wscript.Echo objFile.Version

Next

Jak zapowiadaliśmy, nie jest źle. Warto zwrócić jeszcze uwagę na sposób podawania ścieżek dostępu w zapytaniu:

"Select * from CIM_Datafile Where Name = 'c:\\windows\\system32\\scrrun.dll'"

W całej ścieżce używamy znaków \\. Jest to konieczne, bo pojedynczy znak \ jest zastrzeżony w WMI, więc chcąc użyć go w wyrażeniu typu Where musimy poprzedzić go drugim znakiem \. Nic wielkiego, ale trzeba o tym pamiętać.

Teraz skrypt jest już zupełnie prosty. Skrypt przykładowy podaje informacje o pliku Scrrun.dll na komputerze lokalnym. W celu uzyskania tych informacji z komputera zdalnego należy zmienić wartość zmiennej strComputer. I tak, poniższy wiersz kodu przypisuje tej zmiennej wartość atl-ws-01:

strComputer = "atl-ws-01"

Skrypt z tą wartością poda informacje z komputera computer atl-ws-01.

 Do początku strony Do początku strony


Centrum skryptów - Systemy operacyjne