Musíme ohlídat zda nám na serveru běží konkrétní software:
Představte si firmu kde je několik video serverů.Přesněji
servery pro nahrávání videa z kamerového IP systému.Na každém serveru běží program
Nuoo který nahrává záznam,ale dokáže si i ohlídat IP kamery a v případě ztráty
signálu poslat email.Jenže pokud Nuoo neběží,pak žijeme v blahé nevědomosti že se
záznamy vesele tvoří. Z tohoto blaženého pocitu vás vytrhne až žádost policie o
kamerový záznam ,který nemáte a vy vše musíte vysvětlovat nadřízenému,policii
atd.
Co se stalo? mám nástroje které nám včas nahlásí že
nějaký server není na síti.Jenže server byl na síti a byl funkční jen neběžel
program pro záznam videa.
Jinými slovy je tu důvod sáhnout po powershellu.
Cíl:zkontrolovat zda na serveru běží konkrétní proces a
pokud ne odeslat email s výstražnou zprávou.
V zájmu čistoty kodu jsem ještě přidal test na dostupnost
serveru na síti,plus dostupnost disku c který je pro běh programu nezbytný.
Skript nejdříve otestuje zda je server na síti a zda má
dostupný disk c.Pokud je toto splněno tak teprve poté je server přidán do seznamu
serveru na kterých se provede test na běžící procesy.
Jistě dalo by se to ošetřit podmínkou a k závěrečnému
testování připustit jen ty servery které jsou živé,ale tento způsob jsem použil
už v předešlých ukázkách a tak nabízím další alternativu.
################################ Vytvoril:Petr Skrivan
####################################
#pozor tato funkce se provadi az
nakonec i kdyz je na zacatku skriptu tak je ignorovana..
#..a spusti se az po
zavolani(funkce se vola pomoci jmena)
#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
{
#testujeme zda promenna
$odesleemail ma hodnotu 1 pokud ano odesle email..
#..vzdy kdyz se neco pokazi(neni
ping atd)tak promenne $odesleemail priradime hodnotu 1
#..zde tedy testneme zda se v
prubehu skriptu neco pokazilo
if($odesleemail -eq 1)
{
#zde je casova pauza ktera pocka
5 sekund aby 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 = "skritek@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-Software
Nuoo"
#text zpravy
$zprava.Body = "Byla
zaznamenana chyba v kamerovem systemu"
#zde si do promenne ulozime cestu
k vytvorenemu logu
$cesta = "c:\kamery.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()
}
#ac to tak nevypada tak toto je
posledni prikaz skriptu protoze je uzavren ve funkci..
#..ktera se provadi az na
zavolani funkce jmenem v nasem pripade sendmail na konci skriptu
exit
}
#zde si deklarujeme globalni
promennou a priradime ji hodnotu 0
[int] $global:odesleemail = 0
$datumacas=Get-Date
#zalozime textovy log pojmenujeme
a zaroven zapiseme text v uvozovkach,plus..
#..pridame aktualni datum a
cas jeden znak > znamena zaloz txt soubor,pokud..
#..existuje pak ho prepis,timto
si osetrime ze se nam logy nebudou hromadit..
#..protoze novy log prepise
automaticky ten stary
"Zacatek testu
$datumacas" > c:\kamery.txt
#seznam serveru ulozime do
promenne
$comp="kamery","kamery2","kamery3","kamery4","kamery5","kamery6","kamery7"
#deklarujeme promennou typu pole
$overenecompy = @()
#seznam serveru posleme do roury
vzdy jeden ze seznamu,promena $_ je jmeno serveru ktery..
#..je momentalne v roure je to
vlastne cyklus ktery se zopakuje tolikrat kolik serveru..
#..do roury posleme
$comp | foreach {
#otestujeme zda je server na
siti,rovnou zde testuji zda je dostupny disk c,ktery je pro..
#..beh softwaru nezbytny...POZOR
skript musi spoustet PC s admin pravy na domenu
$zijeserver=Test-Path "\\$_\c$"
#pokud byla cesta v siti nalezena
if ($zijeserver -eq "true")
{
echo "Server $_
je online"
#do logu zapiseme ze server je
online a bezi,dve znamenka >> znaci ze text se ma pridat..
#..do stavajiciho logu,promenna
$_ reprezentuje jmeno serveru ktery momentalne testujeme
"Server $_ je online" >>
c:\kamery.txt
#server je v poradku je na
siti,takze ho pridame do seznamu pro testovani zda na nem bezi..
#..i nas hledany software
$overenecompy += $_
}
#pokud neni server na siti nebo
nema pristupny disk c provede se else
else
{
echo "Server $_
,nebo disk C: neni dostupny"
#zapis do logu..zvyraznime pomoci
grafiky(povystrčíme upozornění)
"Server $_ ,nebo disk C: neni dostupny.. !!!!!
POZOR !!!" >> c:\nuoo.txt
#neco je spatne potrebujeme
odeslat email takze nasi promenne priradime hodnotu 1
$global:odesleemail = 1
#a protoze server nebyl
nalezen,neni pridan do promenne $overenecompy,timto je vyrazen..
#..z dalsiho testovani protoze
nadale budeme pracovat se seznamem $overenecompy
}
}
#graficka uprava logu
"------------------------------------------------------" >>
c:\kamery.txt
" " >>
c:\kamery.txt
#opet roura stejne jako vyse zde
si jen objekt proudici v roure pojmenujeme..
#..takze nepracujeme s promennou
$_ ale $finalcomp,ktera postupne nabude vsechny..
#..hodnoty(jmeno serveru) z
naseho seznamu overenych serveru
##
foreach ($finalcomp in $overenecompy)
{
#do promenne $proces si nacteme
jmena vsech bezicich procesu a vyhledame ten ktery nas zajima
#pokud hledany proces najdeme je
jasne ze software bezi a promenna $proces nabude hodnotu..
$proces=Get-Process -ComputerName $finalcomp|where-object{$_.processname -like “mainconsole”}
#zajimava podminka ktera testuje
zda ma promena jakoukoliv hodnotu,pokud neni null pak ..
#..podminka projde
if ($proces)
{
#vse je v poradku neni treba
odesilat email zapiseme uspech do logu
"Software Nuoo na serveru
$finalcomp je zcela funkcni" >> c:\kamery.txt
echo "Nuoo na
serveru $finalcomp ok"
}
#promenna $proces ma hodnotu null
jinymi slovy proces nebyl,nalezen uplne proste...
#..program na serveru
nebezi,provedeme tedy else
else
{
#musime odeslat email o coz se
postara promenna odesleemail
$global:odesleemail = 1
#
echo "Na
serveru $finalcomp nebezi Nuoo "
#vysledek testu(neuspech)
zapiseme do logu
"Na serveru $finalcomp
doslo k potizim se softwarem Nuoo...!!! POZOR !!!" >>
c:\kamery.txt
}
}
#zavolame funkci
sendemail
Žádné komentáře:
Okomentovat