Powershell: Sprawdzenie wersji pakietów oprogramowania na wielu komputerach

27-mar-2016

Była sobie aplikacja, zaimplementowana na około 30 serwerach. Na niektórych z nich zainstalowano pakiet oprogramowania w wersji X a na innych w wersji Y. Na niektórych z tych serwerów pojawiały się pewne kłopoty, a na innych nie. W każdym razie wygląda na to, że przyczyną tych kłopotów może być zbyt niska wersja tego pakietu. Co robić?

Rozwiązanie numer 1 – otworzyć sesję RDP do każdego z serwerów, na każdym wejść w Dodaj/Usuń programy, poszukać mojego pakietu i… spisać jego wersję. A jak za miesiąc przyjdzie znowu sprawdzić to samo, trzeba będzie otworzyć sesję RDP do każdego z serwerów, na każdym wejść w Dodaj usuń/programy… never ending story…

Rozwiązanie numer 2 – skorzystać z powershella:

Najpierw tworzymy listę komputerów do sprawdzenia. Można ją przechowywać nawet w pliku, tutaj inicjuję ją po prostu w zmiennej:

$computers = "Server01", "Server02", "Server30"

Jest sobie taka klasa WMI o nazwie Win32_Product, kóra prezentuje w sobie zainstalowane na danym systemie oprogramowanie. Aby sprawdzić, czy na komputerze jest zainstalowany dany produkt można  wykonać zapytanie WMI:

Get-WMIObject -Class Win32_Product -filter "Name LIKE '%PDW%'" -ComputerName $c

Co się tutaj stało? Get-WMIObject nawiązuje połaczenie z komputerem, którego nazwę zapisaliśmy w zmiennej $c. Gdyby opuścić parametr -filter, to zwrócona zostałaby informacja o każdym zainstalowanym programie, a to trochę za dużo (chociaż też kiedyś może się przydać). My w parametrze filter oczekujemy, że nazwa programu ma zawierać napis PDW. Zwróć uwagę, że wyrażenie w filtrze wygląda jak zapytanie SQL., tzn. stosujemy operator LIKE i stałą '%PDW%’. Ze zwróconego obiektu klasy Win32_product można by oczywiście wybrać tylko interesujące nas właściwości, ale tu zdecydowałem się na wyświetlenie wszystkiego.

To co pozostaje to oczywiście wywołać w/w polecenie w pętli, dla każdego koputera np. tak:

foreach ($c in $computers)
{
 Write-Host $c
 Get-WMIObject -Class Win32_Product -filter "Name LIKE '%PDW%'" -ComputerName $c
}

A gdy za miesiąc trzeba będzie sporządzić nowe zestawienie, to… uruchom jeszcze raz ten skrypt i po cichu myk myk do kuchni na kawę.

Komentarze:

  1. Kurs Powershell. Informacja dla studentów | Kursy OnlineKursy Online napisał,

    […] Sprawdzenie wersji oprogramowania na wielu komputerach […]

Autor: Rafał Kraik