Visualizzazione post con etichetta Elenco Processi. Mostra tutti i post
Visualizzazione post con etichetta Elenco Processi. Mostra tutti i post

lunedì 11 marzo 2019

PowerShell: Creazione di un documento Excel contenente l'elenco dei processi in esecuzione

Lo script PowerShell presentato in quest'articolo consente di creare un documento MS Excel in cui vengono elencati i processi in esecuzione sulla postazione con relative informazioni su Nome del processo, ID, tempo di CPU ed eventuale percorso del file eseguibile. Un prerequisito per l'esecuzione di tale script è che sulla postazione sia installato MS Excel.
Se eseguendo lo script si riceve errore relativo a restrizioni impostate sulla postazione, eseguire il comando
set-executionpolicy unrestricted

Analizziamo lo script nel dettaglio.
Nella variabile $path andiamo ad inserire il nome, comprensivo di percorso, da assegnare al documento MS Excel una volta creato.
$path = "c:\ElencoProcessi.xlsx"
Con le successive tre istruzioni viene avviato MS Excel, creata una nuova cartella di lavoro e all'interno di quest'ultima ci si posiziona sul foglio di lavoro che andrà a contenere le informazioni sui processi.
$objExcel = new-object -comobject excel.application 
$objWorkbook = $objExcel.Workbooks.Add() 
$objWorksheet = $objWorkbook.Worksheets.Item(1)

Per non visualizzare a video la finestra di MS Excel in fase di creazione del file, nello script viene utilizzata l'istruzione
$objExcel.Visible = $False
All'interno del foglio di lavoro utilizziamo la prima riga come riga di intestazione assegnando un nome a ciascuna colonna in base al contenuto che andremo successivamente ad inserire.
$objWorksheet.Cells.Item(1, 1) = "Process"
$objWorksheet.Cells.Item(1, 2) = "ID"
$objWorksheet.Cells.Item(1, 3) = "CPU"
$objWorksheet.Cells.Item(1, 4) = "Path"
Il cuore dello script è rappresentato dalle seguenti istruzioni. 
$row=2
Get-Process | Sort-Object ProcessName | Select ID, ProcessName,CPU, Path | foreach-object{ 
 $objWorksheet.Cells.Item($row,1) = $_.processname;
 $objWorksheet.Cells.Item($row,2) = $_.id;
 $objWorksheet.Cells.Item($row,3) = $_.cpu;
 $objWorksheet.Cells.Item($row,4) = $_.path;
 $row++
}
La variabile $row viene inizializzata a 2 (nella prima riga del foglio di lavoro abbiamo inserito l'intestazione) e verrà utilizzata per spostarci alla riga successiva man mano che verranno trovati e inseriti i processi all'interno del foglio. Tramite il cmdlet Get-Process otteniamo i processi in esecuzione che vengono ordinati per nome  con Sort-Object ProcessName e inseriti all'interno del foglio di lavoro.
Al termine non resta che salvare il documento creato e chiudere MS Excel. Nel caso in cui il nome del file risulti già presente, apparirà una finestra di dialogo in cui viene richiesto all'utente se intende sovrascriverlo.
$objWorkbook.SaveAs($path)
$objWorkbook.Close()
$objExcel.Quit()
PowerShell, Script ElencoProcessi.ps1
FIG 1 - PowerShell, Script ElencoProcessi.ps1

Lo script può essere scaricato dal seguente link
DOWNLOAD
All'interno dello script è presente la funzione Use-RunAs che forza l'esecuzione con i privilegi amministrativi (PowerShell: Forzare l'esecuzione di uno script con privilegi elevati). L'utilizzo di tale funzione non è strettamente necessaria ma può essere utile se si tenta di salvare il file in path che richiedono privilegi elevati.

MS Excel, Elenco Processi
FIG 2 - MS Excel, Elenco Processi