Steamy PowerShell Get-Process Cmdlet per i processi in esecuzione

Interessato ​​a utilizzare il cmdlet PowerShell Get-Process per visualizzare i processi in esecuzione di un sistema? Con Get-Process puoi trovare il proprietario del processo, l’ID del processo, o addirittura dove sul disco si trova il processo.

In questo articolo, imparerai come utilizzare il cmdlet Get-Process di PowerShell attraverso esempi reali. Se manipolare i processi per piegarli alla tua volontà su Windows o Linux sembra divertente, allora continua a leggere!

Correlato: Come uccidere un processo in Linux usando ps, pgrep, pkill e altro ancora!

Prerequisiti

Prima di procedere oltre, di seguito sono riportati i prerequisiti necessari per seguire gli esempi in questo articolo.

  • Sebbene Windows PowerShell 5.1 sia sufficiente per la maggior parte degli esempi qui, PowerShell 7.1 e successivo sono necessari per il supporto di Linux.

Correlato: Aggiornamento a PowerShell 7: Una panoramica

  • Questo articolo utilizza Windows 10 e Ubuntu 20.04 LTS, ma qualsiasi sistema operativo su cui PowerShell funziona sarà compatibile.

Pronto? Lanciamoci e gestiamo alcuni processi!

Visualizzazione dei processi in esecuzione

Get-Process gestisce i processi locali. In questo primo esempio, stai utilizzando il cmdlet PowerShell Get-Process. Questo comando visualizza tutti i processi in esecuzione.

Get-Process restituisce uno snapshot istantaneo delle informazioni sui processi in esecuzione di un sistema. Per visualizzare le informazioni sui processi in tempo reale, Windows offre il Task Manager e Linux offre il comando top.

Per iniziare, apri la console di PowerShell e esegui Get-Process. Nota che Get-Process restituisce le informazioni sui processi in esecuzione, come mostrato di seguito. Il formato di output è identico per i sistemi operativi Windows e Linux.

Using the Get-Process cmdlet on Windows to display local processes.

Per impostazione predefinita, gps o ps esistono come alias dei comandi per Get-Process. Poiché PowerShell 7 è multipiattaforma, il comando ps entra in conflitto con un comando Linux integrato. Pertanto, ps non funzionerà su Linux, solo l’alias gps.

Il significato dell’output di Get-Process potrebbe non essere immediatamente ovvio. Le proprietà predefinite di Get-Process sono descritte più dettagliatamente di seguito.

  • NPM(K) – La quantità di memoria non paginata utilizzata da un processo, visualizzata in kilobyte, come indicato dalla notazione (K).
  • PM(M) – La quantità di memoria paginabile utilizzata da un processo, visualizzata in megabyte, come indicato dalla notazione (M).
  • WS(M) – Le dimensioni del set di lavoro del processo, visualizzate in megabyte. Il set di lavoro è costituito dalle pagine di memoria recentemente referenziate dal processo.
  • VM(M) – La quantità di memoria virtuale utilizzata dal processo, visualizzata in megabyte. Include lo spazio di archiviazione nei file di paging su disco.
  • CPU(S) – La quantità di tempo del processore utilizzata dal processo su tutti i processi, visualizzata in secondi.
  • Id – L’ID del processo (PID) del processo.
  • SI – Identificatore di sessione del processo in esecuzione. La sessione 0 indica che il processo è disponibile per tutti gli utenti, 1 indica che il processo esiste sotto il primo utente connesso, e così via.
  • ProcessName – Il nome del processo in esecuzione.

Per visualizzare un elenco di alias di proprietà mappate su nomi completi delle proprietà, utilizzare il comando Get-Process | Get-Member -MemberType 'AliasProperty'.

Di seguito è riportato un altro ottimo esempio. Per ogni istanza del processo brave che trova, utilizza l’ID di quel processo ($_.id) e lo passa a Get-NetTCPConnection. PowerShell utilizza quindi Get-NetTCPConnection per trovare informazioni su ogni connessione di rete aperta dal processo brave.

Esegui il seguente codice nella sessione di PowerShell quando il browser Brave è in esecuzione.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

Grazie a Jay Adams di SystemFrontier!

Congratulazioni, ora puoi visualizzare tutti i processi in esecuzione sia su Windows che su Linux utilizzando il comando Get-Process!

Trovare attributi specifici di un processo

Get-Process restituisce molte proprietà diverse per i processi in esecuzione, come hai visto in precedenza. Come per tutti gli altri oggetti di PowerShell, puoi selezionare selettivamente le proprietà degli oggetti.

Passiamo ora a un esempio semplice di come puoi recuperare proprietà specifiche per un processo specifico:

  1. Avvia la calcolatrice di Windows.

2. Con una console di PowerShell aperta, esegui il comando Get-Process utilizzando il parametro Name per mostrare solo i processi in esecuzione con il nome Calcolatrice. Vedrai lo stesso output che hai visto in precedenza.

Get-Process -Name 'Calculator'

Get-Process restituisce molte proprietà come previsto. Forse desideri solo trovare l’utilizzo della CPU con il valore sotto la colonna CPU(s). Racchiudi il comando Get-Process tra parentesi e fa riferimento alla proprietà CPU come mostrato di seguito. Vedrai che restituisce solo il valore della proprietà CPU.

(Get-Process -Name 'Calculator').CPU

Nota che Get-Process restituisce un nome chiamato CPU(s) e il frammento di codice sopra utilizza il nome solo di CPU. A volte, PowerShell non mostra il nome reale della proprietà nell’output. Questo concetto è eseguito con un file di formattazione PS1XML.

Il tempo CPU è espresso come totale dei secondi attraverso i core. Per ottenere un numero più leggibile per l’utente, arrotondalo al decimo più vicino usando un metodo Math come mostrato di seguito.

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

Puoi utilizzare l’approccio sopra per trovare anche altre proprietà come Id se vuoi vedere solo l’ID di un processo.

Lascia in esecuzione l’applicazione Calculator. Utilizzerai questa applicazione per il resto degli esempi.

Recupero dell’utilizzo della memoria del processo

La risoluzione dei problemi nei sistemi con esecuzione lenta può essere una sfida, spesso causata da memoria limitata. Continuando con l’applicazione Calculator, recupera il processo Calculator e mostra solo la proprietà VM. Come mostrato di seguito, la memoria utilizzata è visualizzata in megabyte (MB).

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

Per aiutare a comprendere l’utilizzo della memoria, utilizza i moltiplicatori di conversione integrati di PowerShell per cambiare i megabyte (MB) in gigabyte (GB). Nell’esempio seguente, convertirai la memoria utilizzata in GB e poi utilizzerai il libreria matematica .NET metodo Round per arrotondare il valore, come mostrato nello screenshot seguente.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# Utilizza il metodo Round del tipo Math di .NET
[Math]::Round($ProcessMemoryGB / 1GB)

Utilizzare le utility integrate di PowerShell per convertire i valori rende più semplice comprendere l’output. Continua a leggere per imparare come individuare l’ID di un processo.

Converting the calculator process memory usage to a rounded GB format.

Esposizione di proprietà poco conosciute

Non tutte le proprietà sono incluse o mostrate per impostazione predefinita con Get-Process. Continua a leggere di seguito per saperne di più sulle proprietà Path e UserName e su come utilizzarle!

Scoprire dove risiede un’eseguibile di processo

Ci sono molti luoghi in un sistema dove può essere archiviato un eseguibile di processo. Se un processo è attualmente in esecuzione, Get-Process rende facile trovare il percorso del file di sistema del processo, nonostante Path non venga visualizzato per impostazione predefinita. Come mostrato di seguito, la proprietà Path contiene la posizione del filesystem dell’eseguibile del processo.

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

Proprio come in Windows, Get-Process in Linux restituisce anche il percorso del filesystem. Nell’esempio qui sotto, il processo gnome-calculator è in esecuzione con il percorso visualizzato nell’output della console.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

Intelligenti attori malintenzionati possono dare lo stesso nome o simile a un processo fidato. Pertanto, la capacità di individuare il percorso del filesystem aiuta in uno scenario di risposta agli incidenti di sicurezza (IR). Continua a leggere per scoprire come individuare il proprietario del processo, poiché UserName non è incluso nell’output predefinito.

Trovare il Proprietario del Processo

Per includere il valore UserName nell’output, sarà necessario utilizzare il parametro IncludeUserName. È importante conoscere il proprietario del processo, specialmente per evitare di interrompere involontariamente il processo di un altro utente. Come mostrato di seguito, la proprietà UserName è ora inclusa nell’output del processo.

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

Infine, continua a leggere per apprendere come utilizzare Get-Process su un computer remoto per recuperare informazioni sui processi!

Trovare i Processi su Computer Remoti

Anche se in Windows PowerShell, Get-Process non ha capacità remote di per sé, è sempre possibile sfruttare PowerShell Remoting e il comando Invoke-Command per eseguirlo su computer remoti.

Correlato: Come configurare PSRemoting con Windows e Linux

Ma, se sei su Linux o stai eseguendo PowerShell 6 su Windows, ora hai un parametro ComputerName che puoi utilizzare per interrogare processi su computer remoti.

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

Il parametro -ComputerName è stato rimosso in PowerShell 7.x poiché il cmdlet non è direttamente correlato al remoting. Per ottenere lo stesso risultato, puoi avvolgere il comando in un Invoke-Command, così: Invoke-Command -ComputerName "NomeComputer" -ScriptBlock { Get-Process -ProcessName 'processo' }

Quando il comando sopra viene eseguito su un computer remoto, viene mostrato lo stesso output come se il comando Get-Process fosse stato eseguito localmente.

Di seguito è riportato un esempio di remoting su un altro computer e ottenimento dei processi in esecuzione:

Computer and Getting Running Processes

Puoi mirare a più computer separandoli con una virgola, ad esempio Get-Process -ComputerName SRV1,SRV2.

Passaggi successivi

In questo articolo, hai imparato come utilizzare il cmdlet PowerShell Get-Process per trovare processi in esecuzione con PowerShell su computer locali e remoti sia Linux che Windows.

Ora, cosa farai con questa conoscenza? Prova a passare un processo recuperato da Get-Process a Stop-Process su un computer locale o remoto per terminarlo!

Source:
https://adamtheautomator.com/powershell-get-process/