Máme PC nebo server u kterého je důležité aby fungoval
bez problémů 24 hodin denně.Většina závad se sama ohlásí daleko předem a to zápisem
do eventlogu.Může se jednat o výstrahu,upozornění a v nejhorším
případě i chybová hláška.
Kontrolovat každý den několik stanic je nereálné.Takže pokud máme vše dobře nastaveno a máme moderní OS
který dokáže varování odeslat emailem... je vše ok.
Jenže co když nemáme ten správný OS nebo chceme kontrolu
centralizovat..no jasně máme powershell.
Tento skript si vzdáleně sáhne pro výpis z logu na
jakémkoliv stroji a zpracuje ho.Zde konkrétně řešíme výpis ze systémového
logu.Zajímají nás jen chyby a to jen z dnešního dne.Z tohoto důvodu je vhodné
naplánovat spuštění skriptu na pozdní večerní hodiny.
Pokud se najdou nějaká chybová hlášení jsou zapsána do
logu(textový soubor).Ten je následně odeslán na danou emailovou adresu jako
příloha zprávy.
Skript pro odeslání emailu s přílohou není můj.Popsal ho
Patrik Malina ve své knize jak vyzrát na powershell 2.0 ,ti co to myslí s powershellem vážně už jí
mají a ti ostatní si ji nakonec stejně koupí.
################################ Vytvoril:Petr Skrivan ####################################
#pojmenovani funkce:tato se stara o odeslání emailu
s přílohou pochazi z knihy...
#..Jak vyzrát na powershell 2.0
(vrele doporucuji)od Patrika Maliny
function sendemail
{
#zde je casova pauza ktera pocka
5 sekund aby predesly skript mel dostatek casu na..
#..ulozeni text-logu
Start-Sleep -Seconds 5
$smtpKlient = new-object system.net.mail.smtpClient
$zprava = New-Object system.net.mail.mailmessage
$prihlaseni = New-Object system.net.NetworkCredential
#zde uvedete vase prihlasovaci
udaje na postovnim serveru
$prihlaseni.username = "skrtek@neco.cz"
$prihlaseni.Password = "heslo"
#adresa postovniho serveru
$smtpKlient.Host = "192.168.100.100"
#prihlasovaci procedura
$smtpKlient.Credentials = $prihlaseni
#od koho byla zprava odeslana
$zprava.From = "error@neco.cz"
#komu odesilame zpravu
$zprava.To.Add("skritek@neco.cz")
#predmet zpravy
$zprava.Subject = "VAROVANI-SYSTEMOVY
LOG"
#text zpravy
$zprava.Body = "Byla
zaznamenana chyba v systemovem logu"
#zde si do promenne ulozime cestu
k vytvorenemu logu
$cesta = "c:\errorlog.txt"
#novy objekt priradime promenne
$priloha
$priloha = New-Object system.net.mail.attachment($cesta)
#zde prilohu pridame do zpravy
$zprava.Attachments.Add($priloha)
#odesleme zpravu
$smtpKlient.Send($zprava)
#uvolni prilohu(treba pro dalsi
zpracovani)
$priloha.Dispose()
}
#zalozime textovy dokument a to
na PC jenz spousti tento skript,textovy soubor..
#.. bude se jmenovat errorlog a
bude umístěn na disku c:
#..první radek txt souboru bude
obsahovat text z uvozovek.znamenko > znamená..
#..zaloz novy soubor pokud soubor
existuje pak jej přepíše
#..to nám zajistí že log bude
vzdy aktualni
"Log ze serveru srvr" > c:\errorlog.txt
#do promenne uloz aktualni datum
$datum = Get-Date
#eventlog ze stanice srvr posli
do roury a pak filtruj jen objekty kde je entrytype..
#..error vyber jen prvnich deset
a to vse uloz do promenne
#..jedna se o vypis z logu system
$errorpet = Get-EventLog system -ComputerName srvr |
Where-Object { $_.entrytype -like "error"} | select -First 10
#inicializuj promennou a typu
pole
$zprava = @()
#do roury zasleme prvnich 10
zaznamu typu error vse co je v zavorkach se tedy 10x zopakuje..
#..pro kazdy zaznam jedno kolo
$errorpet | foreach{
#promenna $casy nabude hodnotu
timewriten tedy cas zapsani zaznamu do logu
$casy = $_.timewritten
#filtr ktery porovna aktualni datum s datumem vytvoreni..
#..takze se nam vrati jen zaznamy
z dnesniho dne
if($datum.Year -le $casy.Year -and $datum.Month -le $casy.Month -and $datum.Day -le $casy.Day)
{
#pokud plati podminka vyse,tedy
pokud je zaznam z dnesniho dne pak se zaznam prida do $zprava
$zprava+= $_
}
#vse v zavorkach se
zopakuje 10x tedy pro kazdy zaznam jedno kolecko kdy se zjisti zda..
#..je zaznam z dnesniho dne,pokud
ano prida se k zaznamum ktere tuto podminku splnuji ..
#... vsechny zaznamy jsou zapsany
v promenne $zprava vse co je provadeno pod..
#...zavorkou dole seprovede az po skonceni cyklu
foreach
}
#zde muzou nastat dve
situace,promena $zprava obsahuje zaznamy.jinak receno..
#..byla nalezena shoda(existuje error hlaska z
dnesniho dne) nebo..
#...promenna $zprava je prazdna
takze neexistuje zaznam z dnesniho data
#...zde je osetren pripad prvni tedy
promenna $zprava ma nejakou hodnotu
if ($zprava)
{
#pokud je splnena podminka vyse
pripise se zprava do errorlogu znamenko >> znamena pripsat..
#..text(v tomto pripade pripise
error zaznamy)
$zprava >>
c:\errorlog.txt
#a protoze byl nejaky error zaznam
nalezen zavolame funkci email ktera odesle zpravu a..
#..jako prilohu txt soubor z
logem
sendemail
}
#zde je osetren pripad kdy
promenna $zprava je prazdna v tomto pripade vypise..
#..do konzole text...."nic nenalezeno" a
tim beh skriptu konci
if (!$zprava) {echo "nic
nenalezeno"}
Žádné komentáře:
Okomentovat