Centrum Skrypciarzy - Systemy Operacyjne

Jak określić okres karencji dla komputera z systemem Windows Vista?

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ć okres karencji dla komputera z systemem Windows Vista?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak określić okres karencji dla komputera z oprogramowaniem Windows Vista?

-- LD

Cześć Skrypciarze! Odpowiedź

Cześć, LD. Kilka lat temu Skrypciarz piszący te słowa wyszedł z pracy, wsiadł do samochodu, po czym okazało się, że nie może go odpalić. W tym okresie Skrypciarz pracował jako dziennikarz sportowy i niekiedy bardzo późno kończył pracę. Awaria samochodu miała miejsce właśnie takiego wieczoru; była 2 w nocy, wszędzie ciemno i ani żywej duszy, a samochód nie chce się uruchomić. Żeby pogorszyć sprawę, Skrypciarz piszący te słowa wie mniej o samochodach niż o skryptowaniu. Nie wiedząc za bardzo, co należy czynić, otworzył maskę i zajrzał do środka. Wszystko wyglądało niby w porządku, chociaż prawdę mówiąc piszący te słowa Skrypciarz zauważyłby, że coś jest nie tak dopiero, gdyby się zaczęło palić. Czując, że coś jednak musi zrobić, poruszał kilka kabelków, zamknął maskę i wsiadł za kierownicę. Ku jego wielkiemu zaskoczeniu, silnik uruchomił się od razu. Skrypciarz nie tylko bezpiecznie dojechał do domu, ale już nigdy więcej nie miał problemu z uruchomieniem samochodu.

Problem rozwiązany!

W przeciwieństwie to większości historii pojawiających się w serii Cześć Skrypciarze!, ta ma pewien przekaz: czasami można coś naprawić, nie mając zielonego pojęcia, co się robi. Dotyczy to zarówno samochodów, jak i skryptów. Zaglądając do środka i grzebiąc w kabelkach znajdziemy sposób na określenie pozostałego okresu karencji dla aktywacji systemu Windows; jednakże nie będziemy mogli na pewno powiedzieć jak znaleźliśmy rozwiązanie, ani co ono oznacza. Napotkany przez nas problem sprowadza się do tego, że nie do końca rozumiemy, na czym polega licencjonowanie systemu Windows Vista. (Rzeczywiście, prawdopodobnie jesteśmy jedynymi osobnikami na ziemi, który jeszcze tego nie rozgryźli!)

System Windows Vista ma między innymi nowy sposób licencjonowania Volume Licensing, przeznaczony dla dużych przedsiębiorstw, np. Microsoft. Po zapytaniu o informację na temat licencjonowania i okresu karencji (grace period) na naszym komputerze testowym, otrzymujemy raport wyglądający następująco:

Windows Operating System - Vista, RETAIL channel

Grace period remaining (hours): 0

Licensed



Windows Operating System - Vista, OEM_COA_NSLP channel

Grace period remaining (hours): 0

Unlicensed



Windows Operating System - Vista, OEM_SLP channel

Grace period remaining (hours): 0

Unlicensed



Windows Operating System - Vista, RETAIL channel

Grace period remaining (hours): 0

Licensed



Windows Operating System - Vista, OEM_COA_SLP channel

Grace period remaining (hours): 0

Unlicensed

Co to wszystko oznacza? No cóż, prawdę mówiąc, sami nie wiemy. Na dodatek nie jesteśmy całkiem pewni, jak będą wyglądały uzyskane dane na komputerze z systemem Vista, który nie posiada usługi Volume Licensing. Ale przecież połowa frajdy jeżeli chodzi o skryptowanie polega na tym, żeby zamknąć oczy, przełknąć ślinę, uruchomić skrypt i czekać na to, co się ma wydarzyć.

Uwaga. Czyż Skrypciarze nie powinni się trochę wysilić i dowiedzieć czegoś o usłudze Volume Licencing, zwłaszcza że system Vista posiada ogromną, nową klasę WMI poświęconą licencjonowaniu oprogramowania? O tak, powinniśmy i tak też zrobimy. Jednak na razie zachęcamy do poświęcenia kilku minut na przeczytanie artykułu na temat Volume Licensing oraz SoftwareLicensingProduct na własną rękę.

W każdym razie, bez zbędnych ceregieli (chyba głównie dlatego, że już nie mamy się z czym ceregielić), podajemy skrypt, który może określić pozostały okres karencji dla komputera z zainstalowanym systemem Windows Vista:

strComputer = "."



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



Set colItems = objWMIService.ExecQuery _

    ("Select * From SoftwareLicensingProduct")



For Each objItem in colItems

    Wscript.Echo objItem.Description



    intGracePeriod = Int(objItem.GracePeriodRemaining / 60)

    Wscript.Echo "Grace period remaining (hours): " & intGracePeriod



    Select Case objItem.LicenseStatus

        Case 0 Wscript.Echo "Unlicensed"

        Case 1 Wscript.Echo "Licensed"

        Case 2 Wscript.Echo "Out-Of-Box Grace Period"

        Case 3 Wscript.Echo "Out-Of-Tolerance Grace Period"

        Case 4 Wscript.Echo "Non-Genuine Grace Period"

    End Select



    Wscript.Echo

Next

No dobrze, zobaczmy, czy uda nam się przynajmniej w jakimś sensie rozgryźć ten skrypt i zobaczyć, o co w nim chodzi. Jak widać, zaczynamy od połączenia się z usługą WMI na lokalnym komputerze (chociaż skrypt może zostać równie dobrze uruchomiony na komputerze zdalnym). Następnie używamy poniższego wiersza kodu, aby uzyskać wszystkie wystąpienia klasy SoftwareLicensingProduct, która (gdyby ktoś się zastanawiał) zastępuje klasę Win32_WindowsProductActivation z systemów Windows XP oraz Windows Server 2003:

Set colItems = objWMIService.ExecQuery _

    ("Select * From SoftwareLicensingProduct")

Dobra, to było całkiem proste, nieprawdaż? Po wysłaniu zapytania uruchamiamy pętlę For Each, która przejdzie przez wszystkie elementy uzyskanej kolekcji. Wewnątrz tej pętli, pierwszą rzeczą, którą zrobimy, będzie wywołanie echa wartości właściwości Description:

Wscript.Echo "Description: " & objItem.Description

Nadal jest proste, czyż nie? Ok, a teraz przyjrzyjmy się właściwości GracePeriodRemaining. Jak się okazuje, ta właściwość podaje nam czas (w minutach) pozostały do zakończenia okresu karencji. (Lub, w przypadku komputerów klienckich – czas, znowu w minutach, zanim wymagana będzie ponowna aktywacja.) Z tego właśnie powodu, pobieramy wartość tej właściwości i dzielimy ją przez 60; pozwoli nam to wyrazić pozostały okres karencji w godzinach:

intGracePeriod = Int(objItem.GracePeriodRemaining / 60)

Wscript.Echo "Grace period remaining (hours): " & intGracePeriod

Jeśli chcieli mieć tę wartość wyrażoną w dniach, po prostu dzielimy ją przez 1440 (60 minut w godzinie razy 24 godziny w dniu daje nam 1440 minuty w dniu):

intGracePeriod = Int(objItem.GracePeriodRemaining / 1440)

Wscript.Echo "Grace period remaining (hours): " & intGracePeriod

To w zasadzie jest wszystko, czego dotyczyło pytanie, ale zdecydowaliśmy się posunąć o krok naprzód i uzyskać także status licencji. W tym celu stosujemy polecenie Select Case, które zaczyna działać w oparciu o wartość właściwości LicenseStatus:

Select Case objItem.LicenseStatus

    Case 0 Wscript.Echo "Unlicensed"

    Case 1 Wscript.Echo "Licensed"

    Case 2 Wscript.Echo "Out-of-Box Grace Period"

    Case 3 Wscript.Echo "Out-of-Tolerance Grace Period"

    Case 4 Wscript.Echo "Non-Genuine Grace Period"

End Select

I znowu, kod sam w sobie nie jest skomplikowany. Właściwość LicenceStatus daje nam wartość 0, 1 ,2 ,3 lub 4. Teraz tylko sprawdzamy wartość i wywołujemy echo aktualnego statusu licencji. Na przykład, jeżeli właściwość LicenseStatus ma wartość 2, oznacza to, że system operacyjny znajduje się w okresie karencji. W odpowiedzi wywołujemy echo tej informacji:

Case 2 Wscript.Echo "Out-of-Box Grace Period"

Co to znaczy: znajdować się w okresie karencji? Jakie są tego konsekwencje? No cóż, w tym cały problem: nie wiemy. Ale przy odrobinie szczęścia odpowiedzi na te pytania można znaleźć tutaj. Mamy nadzieję, że to wskazówka w dobrym kierunku. My ze swojej strony obiecujemy zagłębić się w licencjonowanie Visty, kiedy tylko wrócimy do domu.

 Do początku strony Do początku strony

Określanie okresu karencji za pomocą powłoki Windows PowerShell

Nie obiecujemy, że tak będzie we wszystkich przyszłych artykułach, jednak kiedy tylko będzie to możliwe, postaramy się przedstawić rozwiązanie problemu za pomocą powłoki Windows PowerShell, a nie tylko używanego przez nas zazwyczaj VBScript. Należy mieć przy tym na uwadze dwie rzeczy. Po pierwsze, nie będziemy poświęcać dużo miejsca (o ile w ogóle) na wyjaśnienia związane z zastosowaniem powłoki Windows PowerShell; w chwili obecnej po prostu nie mamy na to czasu. Po drugie, w dalszym ciągu naszym celem jest kształcenie; co oznacza, że nasze rozwiązania będą często wymagały więcej pracy z klawiaturą, niż życzyliby sobie tego miłośnicy powłoki Windows PowerShell. (Na przykład, zazwyczaj piszemy całe polecenia, zamiast używać aliasów.) Ale przynajmniej jest to jakiś początek, prawda?

$a=get-wmiobject softwarelicensingproduct -computer scriptcentral | 

select-object description,remaininggraceperiod,licensestatus



foreach ($b in $a)

    {

        $b.description

        $c = $b.graceperiodremaining/60

        "Grace period remaining (hours): $c"



        switch ($b.licensestatus) 

            { 

                0 {"Unlicensed"} 

                1 {"Licensed"} 

                2 {"Out-Of-Box Grace Period"} 

                3 {"Out-Of-Tolerance Grace Period"} 

                4 {"Non-Genuine Grace Period"} 

                default {"The license status could not be determined."}

             }

        write-host

    }
 Do początku strony Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne