[vbs][bat] Sprawdzanie wersji oprogramowania i agregowanie


(hosti) #1

Witam wszystkich,

Jak każdy admin po pewnym czasie zależy nam na wygodzie i jak największej kontroli tego co mamy.

Jako, że w mojej firmie oprogramowanie dostarcza firma trzecia i dystrybuuje je na ponad 70 komputerów zdarza się, że coś jest gdzieś nie tak.

I dlatego zgłaszam się do Was o pomoc/podpowiedź/poradę jak mogę usprawnić działanie tworu który stworzyłem.

Cel: sprawdzanie ponad 70 komputerów z WinXP pod kątem wersji oprogramowania kilku plików exe i wysłanie ma maila informacji.

Stworzyłem plik check.vbs a w nim:

Wscript.Echo ("Sprawdzanie wersji oprogramowania ")

Wscript.Echo ("Lokalizacja: xxx")

Wscript.Echo ("Host: yyy")

Wscript.Echo (" ")

Wscript.Echo (" ************************")

Wscript.Echo (" ")

Wscript.Echo ("Wersja Firefoxa")

Set objFSO = CreateObject("Scripting.FileSystemObject")

Wscript.Echo objFSO.GetFileVersion("C:\Program Files\Mozilla Firefox\firefox.exe")

Wscript.Echo (" ")

Wscript.Echo (" ************************")

Wscript.Echo (" ")

Wscript.Echo ("Wersja Foobara")

Set objFSO = CreateObject("Scripting.FileSystemObject")

Wscript.Echo objFSO.GetFileVersion("E:\foobar2000\foobar2000.exe")

Wscript.Echo (" ")

Wscript.Echo (" ************************")

Wscript.Echo (" ")

Wscript.Echo ("Wersja Google Chrome")

Set objFSO = CreateObject("Scripting.FileSystemObject")

Wscript.Echo objFSO.GetFileVersion("C:\Documents and Settings\xyz\Ustawienia lokalne\Dane aplikacji\Google\Chrome\Application\chrome.exe")

Plik mail.vbs który jest odpowiedzialny za wysłanie danych na podany adres e-mail.

Set myMail=CreateObject("CDO.Message")

set args = WScript.Arguments

Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim fso, f

Set fso = CreateObject("Scripting.FileSystemObject")

'Open the file for reading

Set f = fso.OpenTextFile(args.Item(3), ForReading)

'The ReadAll method reads the entire file into the variable BodyText

BodyText = f.ReadAll

'Close the file

f.Close

Set f = Nothing

Set fso = Nothing


myMail.Subject=args.Item(0)

myMail.From=args.Item(1)

myMail.To=args.Item(2)

myMail.TextBody=BodyText

myMail.Configuration.Fields.Item _

("http://schemas.microsoft.com/cdo/configuration/sendusing")=2

'Name or IP of remote SMTP server

myMail.Configuration.Fields.Item _

("http://schemas.microsoft.com/cdo/configuration/smtpserver") _

="192.168.0.1"

'Server port

myMail.Configuration.Fields.Item _

("http://schemas.microsoft.com/cdo/configuration/smtpserverport") _

=25 

myMail.Configuration.Fields.Update

myMail.Send

oraz plik version.bat który łączy wszystko w całość i nadaje maila.

@echo off

cscript check.vbs > send.txt


C:\version\mail.vbs "Oprogramowanie na kompach" moj@email.pl docelowy@email.pl C:\version\send.txt

Efekt jest taki, że plik version.bat odpala chceck.vbs, sprawdza co ma sprawdzić i tworzy plik send.txt przy pomocy cscript, który to jest później wysłany za pomocą drugiego pliku mail.vbs

W efekcie mam problem taki, że job odpalany będzie raz w tygodniu i przyjdzie "fala" maili (z każdego kompa).

I tu mam do Was pytanie, jak mogę z agregować te dane aby wysłać jednym mailem a nie siedemdziesięcioma.


(Grzelix) #2

Pewnie nie takiej odpowiedzi oczekiwałeś ale napisze co mi przyszło do głowy

a) dedykowana skrzynka email - tylko dla tego celu

b) odpowiednio zdefiniowana reguła w programie pocztowym, która będzie odfiltrowywać te wiadomości od reszty.

lub przy dużo większym wkładzie

c) oprogramowanie przesyłania tych wiadomości innym protokołem


(hosti) #3

grzelix , skrzynka dedykowana jest, problem w tym, że najlepszą formą przedstawienia tych danych byłoby w formie tabeli

Jakie protokoły masz na myśli? Może da się dane przesłać do bazy np mysql?


(Grzelix) #4

poszukaj w google -> client server send file c#

lub z inny językiem jeśli wolisz, ewentualnie może istnieje jakieś gotowe rozwiązanie o podobnej złożoności (tylko przesyłanie pliku), ale jak już zdecydujesz się sam napisać to potem możesz dołożyć moduły parsowania danych i zapisywania w odpowiedni sposób np w bazie danych


(hosti) #5

Myślałem o czymś prostszym. Na C#, C++ i podobnych języków nie znam. Chodzi mi po głowie wykorzystanie protokołu SMB i jakiś BAT-ów, VBS-ów. Może agregowanie danych do Excela albo Accessa?

Ma ktoś może jakiś pomysł? Składowanie w plikach txt też by mogło być.


(Drobok) #6

Możesz wysłać to via post do skryptu php/asp który może skorzystać bazy danych (używałbyś go na swoim serwerze). Możesz też stworzyć aplikację serwerową do łączenia się z bazą i odbierania danych. Drugie jest trudniejsze, ale nie wymaga serwera :slight_smile:


(hosti) #7

Idę właśnie w tym drugim kierunku.

Napisałem właśnie bat-a, który

  • mapuje dysk jako T

  • dokonuje sprawdzenia i wypisania do pliku (cscript check.vbs > plik.sql); Tu mam problem bo w nagłówku mam "Host skrypt˘w systemu Windows firmy... "

  • usuwa mapowanie

  • mapuje kolejnego kompa i robi to samo

Właśnie staram się pokombinować z FINDSTR żeby usunąć ten nagłówek i zrobić z tego inserta

póżniej odpalałbym mysql.exe z połączeniem do bazy i wrzucał plik.sql

taki mam pomysł, z realizacją idzie mi pod górkę zwłaszcza z tym nagłówkiem :slight_smile: