PowerShell: Esercitazione sui servizi
CONSEGNA:
– prendere servizi in base a status
– contare n processi per ogni tipo
– esportare ogni quey in 3 formati
– zippare il tutto e inviare per mail dopo aver visualizzato riepilogo servizi
# definisco path
$path_work = "C:\"
# definisco contatori
$run = 0
$stop = 0
$tot = 0
# definisco "query" che mi vanno a prendere i processi in base al loro status
$queryRun = gsv | ? Status -eq "Running"
$queryStop = gsv | ? Status -eq "Stopped"
$queryAll = gsv
# Get-Service alias => gtv
# ? alias di Where o Where Object
Get-Service |
ForEach-Object{
# se servizio è attivo incremento il relativo contatore
if($_.Status -eq "Running"){ $run++ } # fine if
$queryRun | Out-File $path_work\run.txt
$queryRun | ConvertTo-Html > $path_work\run.html
$queryRun | Export-Csv $path_work\run.csv
# se servizio è stoppato incremento relativo contatore
if($_.Status -eq "Stopped"){ $stop++ } # fine if
$queryStop | Out-File $path_work\stop.txt
$queryStop | ConvertTo-Html > $path_work\stop.html
$queryStop | Export-Csv $path_work\stop.csv
# incremento contatore totale servizi
$tot++
$queryAll | Out-File $path_work\all.txt
$queryAll | ConvertTo-Html > $path_work\all.html
$queryAll | Export-Csv $path_work\all.csv
} # fine for-each
# zippo i file creati per ogni tipo
Compress-Archive -LiteralPath $path_work\run.csv, $path_work\run.html, $path_work\run.txt -CompressionLevel Optimal -DestinationPath $path_work\run.zip
Compress-Archive -LiteralPath $path_work\stop.csv, $path_work\stop.html, $path_work\stop.txt -CompressionLevel Optimal -DestinationPath $path_work\stop.zip
Compress-Archive -LiteralPath $path_work\all.csv, $path_work\all.html, $path_work\all.txt -CompressionLevel Optimal -DestinationPath $path_work\all.zip
# elimino vecchi file
Remove-Item –path $path_work\run.csv –recurse
Remove-Item –path $path_work\run.html –recurse
Remove-Item –path $path_work\run.txt –recurse
Remove-Item –path $path_work\stop.csv –recurse
Remove-Item –path $path_work\stop.html –recurse
Remove-Item –path $path_work\stop.txt –recurse
Remove-Item –path $path_work\all.csv –recurse
Remove-Item –path $path_work\all.html –recurse
Remove-Item –path $path_work\all.txt –recurse
# visualizzo riepilogo
Write-Host "`nServizi Totali: " $tot
Write-Host "Servizi che stanno lavorando: " $run
Write-Host "Servizi che sono fermi: " $stop
$From = "mail@gmail.com"
$To = "mail@gmail.com"
$Cc = "mail@gmail.com"
$Subject = "Finalmenteee"
$Body = "Ecco gli allegati:"
$Attachment = "$path_work\run.zip", "$path_work\all.zip", "$path_work\stop.zip"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$pass = ConvertTo-SecureString "PASSW_MAIL" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("mail@gmail.com", $pass)
Send-MailMessage `
-From $From `
-to $To `
-Cc $Cc `
-Subject $Subject `
-Body $Body `
-SmtpServer $SMTPServer `
-port $SMTPPort `
-UseSsl `
-Credential $cred `
-Attachments $Attachment