Zdalne zbieranie informacji o komputerach w sieci – Skrypty VBS cz.9

Print Friendly, PDF & Email

Przy pomocy Win32_ możemy zebrać praktyczne wszystkie informacje o komputerze jakie są tylko możliwe.Poniższy skrypt pozwala nam na zebranie informacji ze zdalnych komputerów w naszej sieci, zarówno za pomocą nazw jak i adresów IP. Na dysku C: tworzymy 2 pliki .txt:
-Computer.txt – gdzie wpisujemy listę komputerów do skanowania, jeżeli wpiszemy . (kropka) sczytamy dane z lokalnego komputer (w załączniku przykład jak wpisać nazwy komputerów, zamiast nazw można wpisać adresy IP),
-SysInfo.txt – do tego pliku będą dopisywane informacje o komputerach

Skrypt napisałem, ponieważ potrzebowałem z około 40 komputerów odczytać informacje sprzętowe (RAM,Procesor,Liczba rdzeni,Dysk,System operacyjny,Service Pack)  w firmowej sieci, korzystanie z gotowych programów jest trochę niewygodne, ponieważ musimy taki program zainstalować (np.Speccy), poczekać na wyświetlenie informacji, zapisać je, co trwa około około 2-3 minut, natomiast ten skrypt robi to w około 15 sekund.

Ja ustawiłem kilka zmian w systemie:
– wyłączony firewall,
– ustawiłem ręcznie IP oraz pozostałe dane karty sieciowej (nie miałem możliwości na szybko ustawić DHCP w mojej sieci testowej, w firmowej jest)
– na zakładce WINS zaznaczona opcja – włącz system NetBIOS przez TCP/IP,

Testowałem to co prawda tylko na 2 maszynach+te w firmie, jednak zarówno szukałem komputerów w sieci po nazwie jak i po adresie IP, wyniki zgadzały się z parametrami fizycznymi komputerów, jeden miał 1 GB ramu, drugi 3.5GB.

Gotowy skrypt możesz pobrać klikając TUTAJ.

on Error Resume Next  

Dim fso,objShell,writeFile,readFile,objWMIService,colSystem,colProcesor,colOperationSystem

Function FindOSType(strOSSys)

   Dim objWMI, objItem, colItems

    Dim OSVersion, OSName, ProductType

     Set objWMI = GetObject(„winmgmts://” & strOSSys & „/root/cimv2”)

    Set colItems = objWMI.ExecQuery(„Select * from   Win32_OperatingSystem”,,48)


    For Each objItem in colItems

        OSVersion = Left(objItem.Version,3)

        ProductType = objItem.ProductType

    Next

Select Case OSVersion

Case „6.1”

OSName = „Windows 7/ 2008 R2”

        Case „6.0” 

            OSName = „Windows Vista / 2008”

        Case „5.2” 

            OSName = „Windows 2003”

        Case „5.1” 

            OSName = „Windows XP”

        Case „5.0” 

            OSName = „Windows 2000”

        Case „4.0” 

            OSName = „Windows NT 4.0”

        Case Else

            OSName = „Windows 9x”

    End Select


     FindOSType = OSName

End Function 

Const ForAppending = 8

Const ForReading = 1


Set objShell = WScript.CreateObject(„WScript.Shell”)

Set fso = WScript.CreateObject(„Scripting.Filesystemobject”)

Set writeFile = fso.OpenTextFile(„C:SysInfo.txt”,ForAppending) 

Set readFile = fso.OpenTextFile(„C:Computers.txt”,ForReading) 


Do While readFile.AtEndOfStream <> True

    strComputer = readFile.ReadLine

   

Set objWMIService = GetObject(„winmgmts:” & „{impersonationLevel=impersonate}!\” & strComputer & „rootcimv2”)

Set colSystem = objWMIService.ExecQuery („Select * from Win32_ComputerSystem”)

Set colProcesor = objWMIService.ExecQuery („Select * from Win32_Processor”)

Set colHardDrive = objWMIService.ExecQuery („Select * from Win32_LogicalDisk”)

Set colOperationSystem = objWMIService.ExecQuery („Select * from Win32_OperatingSystem „)

Set colCacheMemory = objWMIService.ExecQuery („Select * from Win32_CacheMemory „)


For Each objComputer in colSystem

writeFile.WriteLine „Nazwa: ” & objComputer.Name 

writeFile.WriteLine ” „

writeFile.WriteLine „Ram: ” & Round(((objComputer.TotalPhysicalMemory)/1073537024),2) & ” GB RAM”

writeFile.WriteLine ” „

Next


For Each objProcesor in colProcesor

writeFile.WriteLine „Procesor: ” & objProcesor.Name & objProcesor.MaxClockSpeed

writeFile.WriteLine „Rdzenie: ” & objProcesor.NumberOfLogicalProcessors

writeFile.WriteLine „Cache L2: ” & Round(((objProcesor.L2CacheSize)/1024),2) & ” MB „

writeFile.WriteLine „Cache L3: ” & Round(((objProcesor.L3CacheSize)/1024),2) & ” MB „

writeFile.WriteLine ” „

Next


For Each objOS in colOperationSystem

writeFile.WriteLine „OS: ”  & FindOsType(strComputer)   

writeFile.WriteLine „Architektura: ”  & objOS.OSArchitecture

writeFile.WriteLine „SP: ”  & objOS.CSDVersion

writeFile.WriteLine ” „

Next


For Each objHardDrive in colHardDrive

writeFile.WriteLine „Partycja ” & objHardDrive.Name & ” ”  &  Round(((objHardDrive.Size)/1073537024),2) & ” GB „

writeFile.WriteLine „Wolne miejsce: ” & Round(((objHardDrive.FreeSpace)/1073537024),2) & ” GB „

writeFile.WriteLine ” „

Next

objShell.Popup strComputer, 1

writeFile.WriteLine „———————————————————„

Loop

writeFile.Close

readFile.Close

Wscript.Echo „Skrypt zakończony…”


Print Friendly, PDF & Email

Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

6 komentarzy do “Zdalne zbieranie informacji o komputerach w sieci – Skrypty VBS cz.9”

  1. Pytanie odnośnie plików txt. Zakładam, że plik SysInfo ma być pusty, a plik z listą komputerów ma jakąś strukturę. Czy mógłbyś umieścić przykład jak ma wyglądać taki plik, ewentualnie czy można jeśli jest to lista adresów ip załatwić skanowanie takim wpisem 10.1.1.0/22 czy trzeba wszystkie kompy z palca do pliku wpisać

    Odpowiedz
  2. SysInfo ma być pusty, natomiast listę komputerów polecam zrobić programem Look At Lan, można wyeksportować raport do Exel'a, w ten sposób będzie można wyciągnąć wszystkie adresy IP, adresy wrzucamy jeden pod drugim w wiersze pliku, ważne żeby na końcu nie było spacji. Nie próbowałem robić skanowania podając klasę adresu oraz jego maskę, w moim przypadku wszystko robiłem podając nazwy komputerów, ich nazwy wyciągnąłem z AD.

    Odpowiedz
  3. sysinfo miałem pusty listę zrobiłem look at lan, uruchomiłem skrypt w konsoli wpisując polecenie cscript skaner.vbs. Skrypt co kilka sekund zwiększał rozmiar pliku sysinfo o 1kB, po 30 minutach przerwałem działanie skryptu, otwarłem plik i okazało się, że plik jest pusty w środku, ale ma 4MB wagi.
    Plik wypełniony był w ten sposób:
    ————————————————

    ———————————————–
    w regularnych odstępach.
    wyczyściłem plik z listą kompów, pozostawiając jeden adres, po całej nocy działania skryptu sytuacja się powtórzyła tylko że plik miał 60MB.
    Co robię nie tak?

    Odpowiedz
  4. Proszę napisać mi jakie systemy operacyjne działają na maszynach? Ja ten skrypt napisałem gdy wszystkie komputery w firmie miały XP, gdy potrzebowałem zestawienie , które komputery mamy do wymiany. Możliwe że zaszły zmiany w Wscript odnośnie zdalnego połączenia do rejestru, musiałbym sprawdzić ten skrypt czy działa teraz na naszych nowych komputerach.

    Odpowiedz
  5. W sieci działają XP Home i XP Prof, mam też XP Prof x64, win 7, win 7 x64. Test zrobiłem na próbce jednego komputera z win xp z wyłączonym firewallem, wynik był taki sam jak dla wcześniejszych prób. Kolejna sprawa skrypt się zapętla i jeśli go nie przerwę to będzie szedł bez końca. Następna kwestia to notorycznie wyskakujące okienko z przyciskiem "ok" ile razy bym nie kliknął tyle razy ono znowu się pojawi, równie dobrze można je olać i skrypt dalej będzie się kotłował

    Odpowiedz
  6. Zaktualizowałem nieco wpis, sprawdziłem działanie skryptu na XP jest poprawnie, natomiast problemy pojawiają się w przypadku Win 7, jeżeli lokalnie go uruchamiam nawet po nazwie jest ok, natomiast zdalne pobieranie danych stwarza problem (podejrzewam, że zewnętrzny antywirus może blokować), w firmie pominąłem te komputery, ponieważ nie podlegały wymianie. Sprawdziłem dodatkowo skrypt skanują 5 serwerów, na których działa 2003 oraz 2008 i dane również się pojawiły. W momencie gdy jakiś adres/nazwa nie odpowiada zapisane zostają jedynie linie przerywane lub też dublują się wpisy.

    Odpowiedz

Dodaj komentarz

beitadmin.pl - Droga Administratora IT