Centrum skryptów - Systemy operacyjne

Jak określić, która wersja systemu Windows Vista jest zainstalowana na komputerze?

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 określić, która wersja systemu Windows Vista jest zainstalowana na komputerze?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Jak określić, która wersja systemu Windows Vista jest zainstalowana na komputerze?

-- GC

Cześć Skrypciarze! Pytanie

Cześć, GC. Wszyscy wiedzą, że firma Microsoft jest największą i najlepiej zarabiającą firmą na świecie. Jednak pomimo wszystkich jej sukcesów nie różni się niczym od innych firm: przykładowo, od czasu do czasu stajemy się trochę zazdrośni, jeżeli chodzi o inne formy i o to, co im się udało osiągnąć. Ale to jest przecież zrozumiałe, od lat pracownicy firmy Microsoft muszą znosić to upokorzenie, kiedy w drodze do pracy mijają budkę z lodami, w której sprzedawanych jest 32 różnych rodzajów smaków. 32 różne smaki lodów! Jak w ogóle można z czymś takim konkurować?

Ale w końcu jesteśmy firmą Microsoft. Oni mają 32 różne smaki lodów? A niech sobie tam mają, ile im się podoba; zobaczmy ile różnych smaków systemu Windows Vista uda nam się wydać. Właśnie, zobaczmy: mamy Windows Vista Home Basic oraz Windows Vista Home Premium. Jest też edycja Windows Vista Enterprise, Windows Vista Ultimate, Windows Vista Biała Czekolada Orzechowy Raj. I co tylko jeszcze chcecie. Dzięki systemowi Windows Vista wszyscy pracownicy firmy Microsoft mogą przechodzić obok budki z lodami z podniesionymi głowami.

Uwaga. No dobrze, W sumie to nie wszyscy przechodzą obok tej budki, niektórzy się przy niej nawet zatrzymują i zamawiają małe conieco. Jakieś trzy lub cztery gałki różnych smaków. Sami wiecie, jak to działa.

Jest taka zasada, że im więcej mamy do wyboru, tym lepiej. Z drugiej jednak strony posiadanie 32 edycji systemu Windows Vista mogłoby bardzo skomplikować życie administratorom systemu. To twierdzenie jest tym bardziej prawdzie, że te różne edycje systemu Windows Vista mają różne możliwości. (Przykładowo, jeżeli chcemy korzystać z funkcji szyfrowania BitLocker, musimy zainstalować Windows Vista Ultimate.) Jak jednak określić, czy na komputerze zainstalowany jest system Windows Vista, nie mówiąc już o tym, która jego edycja jest zainstalowana?

Zabawne, że właśnie o to pytacie:

strComputer = "."



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



Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")



For Each objItem in colItems

    If Instr(objItem.Caption, "Vista") Then

        Select Case objItem.OperatingSystemSKU

             Case 0 strVersion = "Undefined."

             Case 1 strVersion = "Ultimate Edition." 

             Case 2 strVersion = "Home Basic Edition." 

             Case 3 strVersion = "Home Basic Premium Edition." 

             Case 4 strVersion = "Enterprise Edition." 

             Case 5 strVersion = "Home Basic N Edition." 

             Case 6 strVersion = "Business Edition." 

             Case 7 strVersion = "Standard Server Edition." 

             Case 8 strVersion = "Datacenter Server Edition." 

             Case 9 strVersion = "Small Business Server Edition." 

             Case 10 strVersion = "Enterprise Server Edition." 

             Case 11 strVersion = "Starter Edition." 

             Case 12 strVersion = "Datacenter Server Core Edition." 

             Case 13 strVersion = "Standard Server Core Edition." 

             Case 14 strVersion = "Enterprise Server Core Edition." 

             Case 15 strVersion = "Enterprise Server IA64 Edition." 

             Case 16 strVersion = "Business N Edition." 

             Case 17 strVersion = "Web Server Edition." 

             Case 18 strVersion = "Cluster Server Edition." 

             Case 19 strVersion = "Home Server Edition." 

             Case 20 strVersion = "Storage Express Server Edition." 

             Case 21 strVersion = "Storage Standard Server Edition." 

             Case 22 strVersion = "Storage Workgroup Server Edition." 

             Case 23 strVersion = "Storage Enterprise Server Edition." 

             Case 24 strVersion = "Server For Small Business Edition." 

             Case 25 strVersion = "Small Business Server Premium Edition." 

        End Select

        Wscript.Echo "This computer is running Windows Vista " & strVersion

    Else

        Wscript.Echo "This computer is not running Windows Vista."

    End If

Next

A cóż to? Czy możemy wyjaśnić, jak działa ten skrypt? Nie tylko możemy to zrobić, ale mamy taki zamiar.

Uwaga. Mamy jeszcze jeden powód, dla którego możemy twierdzić, że jesteśmy o jeden krok przed lodziarzami. No bo jak często zdarza się, że lodziarze opowiadają o tym, jak robią swoje tradycyjne lody?

Skrypt rozpoczyna się od połączenia z usługą WMI na lokalnym komputerze. Czy ten skrypt zadziała w przypadku zdalnego komputera? Oczywiście, że tak; w końcu nie byłby zbyt przydatny, gdyby tak nie było. Aby uruchomić ten skrypt na zdalnym komputerze (i w ten sposób określić, która edycja systemu Windows Vista jest na nim zainstalowana), po prostu przypisujemy nazwę zdalnego komputera do zmiennej o nazwie strComputer:

strComputer = "atl-ws-01"
Uwaga. Możliwe jest uruchomienie tego skryptu nawet na grupie komputerów (np. na wszystkich komputerach jednostki OU lub komputerach wymienionych na liście w pliku tekstowym). Przykładowy kod o takim działaniu znajduje się w szablonach Multiple/Remote Computer Scripting Templates (j.ang.)

Po połączeniu się z usługą WMI wywołujemy metodę ExecQuery i pobieramy kolekcję wszystkich systemów operacyjnych używanych aktualnie na komputerze:

Set colItems = objWMIService.ExecQuery("Select * From Win32_OperatingSystem")

Oczywiście w kolekcji znajdzie się tylko jeden element; jest tak dlatego, że tylko jeden system operacyjny może być używany w danym czasie. Ponieważ jednak ciągle jest to kolekcja, potrzebna nam będzie pętla For Each, która przejdzie przez każdy system operacyjny znajdujący się w kolekcji:

For Each objItem in colItems

Co robimy wewnątrz tej pętli? No cóż, najpierw określamy, czy na komputerze zainstalowana jest w ogóle jakakolwiek edycja systemu Windows Vista. Robimy to za sprawą następującego wiersza kodu:

If Instr(objItem.Caption, "Vista") Then

W tym momencie jedyne, co robimy, to sprawdzamy za pomocą właściwości Caption systemu, czy słowo Vista pojawia się gdzieś w tym podpisie. (Robi to za nas funkcja InStr; sprawdza, czy dany podciąg znajduje się gdzieś w wewnątrz wartości ciągu.) Jeżeli funkcja InStr przekaże nam 0, będzie to oznaczało, że słowo Vista nie zostało znalezione we właściwości Caption. W takim przypadku zakładamy, że na komputerze nie ma zainstalowanego systemu Vista i wywołujemy echo odpowiedniego komunikatu:

Wscript.Echo "This computer is not running Windows Vista."

Załóżmy jednak, że funkcja InStr przekaże nam wartość inną niż 0; przykładowo zakładamy, że podpis naszego systemu operacyjnego brzmi następująco:

Microsoft Windows Vista Enterprise

W takim przypadku oznacza to, że na komputerze jest zainstalowany system operacyjny Windows Vista. A to z kolei oznacza, że musimy określić, z którą edycją systemu Vista mamy do czynienia.

Ale nie martwmy się: nie musimy tworzyć następnego skryptu, który szukałby słowa Enterprise we właściwości Caption. Używamy natomiast całkiem nowej właściwości dodanej do klasy Win32_OperatingSystem: OperatingSystemSKU. Właściwość OperatingSystemSKU przekazuje nam liczbę całkowitą identyfikującą jednostkę magazynową SKU danej edycji systemu Vista. Wprawdzie moglibyśmy po prostu przekazać jedną z tych wartości liczb całkowitych (przykładowo, 4 dla komputera z zainstalowaną edycją Windows Vista Enterprise); tak by pewnie zrobili nasi znajomi lodziarze, ale my jesteśmy przecież firmą Microsoft. A to zobowiązuje.

Dlatego też decydujemy się na dodatkowy krok i ustawiamy instrukcję Select Case, określającą wartość właściwości OperatingSystemSKU i przypisującą odpowiednią edycję systemu do zmiennej o nazwie strVersion. Przykładowo, jeżeli właściwość OperatingSystemSKU naprawdę przekaże nam wartość 4, to wykonany zostanie następujący wiersz kodu (i wartość zostanie przypisana do zmiennej strVersion):

Case 4 strVersion = "Enterprise Edition."

Kiedy pozbędziemy się bloku Select Case block wystarczy zastosować następujący wiersz kodu:

Wscript.Echo "This computer is running Windows Vista " & strVersion

Dzięki temu na ekranie zostanie wyświetlony komunikat podobny do poniższego:

This computer is running Windows Vista Enterprise Edition.

I to już wszystko na ten temat.

Zdaję sobie sprawę, że niektórzy mogą się martwić o firmę Microsoft. Zapewniam jednak, ze nie mamy zamiaru spocząć na laurach i nieustannie będziemy dążyć do tego, aby zawsze być o jeden krok do przodu przed lodziarzami. Może nie wydamy 32 edycji systemu Windows Vista, ale nie ma tym kończy się przecież nasza rywalizacja.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne