Powershell: Esercitazione sui processi
CONSEGNA:
– contare il numero dei processi attivi
– far selezionare all’utente quanti processi vuole esportare
– prendere n. processi ordinati in base a uso cpu
– far scegliere a utente formato export tramite menu apposito
– zippare il/i file
– chiedere se vuole inviare per mail altrenti fine programma
– ATTUARE TUTTI I CONTROLLI DEL CASO (Es. input dati utente)
# setto path lavoro
$percorso = "C:\"
#conto processi attivi
$processi_attivi = @(get-process -ea silentlycontinue ).count
#$processi_attivi
# faccio inserire quanti processi vuole esportare + controllo su input
do {
try{
$numOk = $true
[int]$numero = Read-Host "Inserisci quanti processi vuoi esportare"
}catch{
$numOK = $false
Clear-Host
} # fine try-catch
}until(($numero -ge 1 -and $numero -lt $processi_attivi) -and $numOK)
# prendo i primi $numero processi ordinati per uso della cpu
$get = Get-Process | Sort-Object CPU -Descending | Select-Object -First $numero
# facccio selezionare all'utente come vuole esportare il risultato + controllo su input
do{
$check = 0 # flag
# chiedo formato esportazione
$type_export = Read-Host "Scegli il formato di esportazione digitando il numero corrispondente`n1) Txt`n2) Html`n3) Csv`n4) Xml`n5) Tutti`nInserisci numero opzione scelta "
switch ( $type_export ) {
1 { $get | Out-File $percorso\processi.txt }
2 { $get | ConvertTo-Html &gt $percorso\processi.html }
3 { $get | Export-Csv $percorso\processi.csv }
4 { $get | Export-Clixml $percorso\processi.xml }
5 { $get | Out-File $percorso\processi.txt
$get | ConvertTo-Html &gt $percorso\processi.html
$get | Export-Csv $percorso\processi.csv
$get | Export-Clixml $percorso\processi.xml
# creo zip
Compress-Archive -LiteralPath $percorso\processi.xml, $percorso\processi.csv, $percorso\processi.html, $percorso\processi.txt -CompressionLevel Optimal -Update -DestinationPath $percorso\processi.zip
# rimuuovo vecchi file
Remove-Item –path $percorso\processi.csv –recurse
Remove-Item –path $percorso\processi.html –recurse
Remove-Item –path $percorso\processi.txt –recurse
Remove-Item –path $percorso\processi.xml –recurse
} # fine case 5
default { Write-Host "Input non riconosciuto!"
$check++ # flag che mi fa ricominciare ciclo ++
Clear-Host # pulisco schermo
} # fine default
} # fine switch-case
} until($check -eq 0)
do{
$check1 = 0 # flag
$mail = Read-Host "Vuoi inviare via mail l'allegato?`n1) Si`n2) No`nSeleziona la tua risposta digitando il relativo numero "
if($mail -eq 1) {
# invio mail
$From = "mail@gmail.com"
$To = "mail@gmail.com"
$Cc = "mail@gmail.com"
$Subject = "OGGI PROCESSI"
$Body = "Hello World!:"
$Attachment = "$percorso\processi.zip", "$percorso\es.ps1"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$pass = ConvertTo-SecureString "PASSWORD_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
} elseif($mail -eq 2) {
Write-Host "Fine del programma"
} else {
Write-Host "Errore, Input non riconosciuto!"
$check1++ # flag che mi fa ricominciare ciclo ++
Clear-Host # pulisco schermo
} # fine if-else
} until($check1 -eq 0)