SYSTEMINFO, filtrowanie wyników w CMD oraz funkcja „IF”

Dzisiaj chciałbym podpowiedzieć Wam jak można odfiltrować sobie długie wyniki w wierszu poleceń czyniąc „duże” polecenia systemowe bardziej poręcznymi, a także wykorzystać tę sztuczkę w skryptach .cmd, z funkcją IF. Prostymi słowy:  „jeśli fraza występuje to zrób to, a jeśli nie występuje, to zrób coś innego”.

 

Zerknijmy na wbudowane  w system Windows polecenie „systeminfo”. Ilość danych, jaki zwróci nam to polecenie jest całkiem spora. Mamy tu informacje o sprzęcie, systemie, lokalizacji  i poprawkach.

W wielu sytuacjach będziemy potrzebowali jednej konkretnej informacji, zamiast całej listy. Ot, choćby w artykule o UPTIME za pomocą | find „szukana fraza” sczytywaliśmy czas pracy systemu (Posługujemy się przykładami z anglojęzycznego Windowsa. W polskiej wersji wyszukiwane frazy będą troszkę inne):

systeminfo | find „System Up Time”

W identyczny sposób możemy odszukać nazwę komputera:

systeminfo | find „Host Name”

…czy też konkretną zainstalowaną poprawkę bezpieczeństwa:

systeminfo | find „KB2603229”

Działa to identycznie z każdą komendą systemową. Na przykład, wyświetlmy wers mówiący o tym, czy mamy włączone DHCP w poleceniu „ipconfig”:

ipconfig /all | find „Dhcp”

Wyszukiwana fraza może być dowolna, może zawierać spacje i możemy wpisywać tylko fragmenty słów. Wielkość liter ma znaczenie.

Skoro umiemy przycinać wyniki poleceń, zobaczmy jak można w pliku wsadowym utworzyć prosty warunek sprawdzający. Wykorzystajmy „systeminfo„, znajdźmy na liście poprawkę o numerze „KB2603229” i jeśli się znajdzie, wykonajmy jakąś procedurę:

@echo off
systeminfo | find „KB2603229”
IF %errorlevel% EQU 0 goto znaleziono

echo Nie znaleziono…
Goto koniec

:znaleziono
echo W tym miejscu wykona się jakis kod…
:koniec
timeout 5
echo koniec programu

exit

Sprawdzanie opiera się na zmiennej systemowej  %errorlevel%. W dużym uproszczeniu, zmienna %errorlevel% ma domyślnie wartość zero. Gdy pojawi się błąd, zmienna przyjmie jakąś wartość. W naszym scenariuszu znalezienie  poprawki „KB2603229” pozostawi  %errorlevel% z wartością 0. Skrypt przejdzie do wersu zaczynającego się od „:znaleziono”, gdzie możemy umieścić swój dowolny kod.

 

Mam nadzieję, że w tej poradzie dostrzegacie spory potencjał i nieraz z niej skorzystacie w  swojej pracy w IT. Ja mam już pomysł na praktyczne zastosowanie i niebawem opisze to na łamach Bloga SPECE.IT.  Zachęcam do zaglądania tu jak najczęściej   🙂

 

 

Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

Dodaj komentarz