Come uccidere un processo Windows su un sistema remoto

Forse stai lavorando felicemente su un server remoto Windows, poi trovi un processo che si comporta in modo errato utilizzando preziose risorse CPU. Cosa fai? Uccidilo!

In questo tutorial, imparerai come terminare un processo Windows utilizzando strumenti nativi, strumenti di terze parti e PowerShell. Imparerai prima come esaminare i processi in esecuzione in Windows e poi come terminare i processi in esecuzione.

Prerequisiti

Se vuoi seguire i passaggi di questo tutorial, assicurati di aver preparato quanto segue in anticipo:

  • A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
  • A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
  • La Suite Sysinternals di Microsoft.
  • Windows PowerShell 5 o versione successiva. Questo tutorial utilizza PowerShell v7.1.3

Interrogare un processo Windows remoto con Tasklist

Dal sistema operativo Windows XP, esiste uno strumento utile chiamato tasklist. Tasklist è uno strumento molto utile che consente di interrogare i processi su computer remoti. Prima di poter terminare un processo, devi prima scoprirlo!

Apri una sessione di PowerShell o il prompt dei comandi sul tuo desktop e digita il seguente comando per visualizzare tutti i processi in esecuzione sul tuo computer remoto.

Il comando di seguito interroga un computer remoto (/S) autenticando la connessione con il nome utente amministratore (/U) e la password (/P).

tasklist /S WIN-BANGJIEFNOC.local.net /U administrator /P password

Noterai qui sotto che il Nome Sessione non appare. Poiché stai eseguendo tasklist su un computer remoto, tasklist non fornisce il Nome Sessione.

list of processes on a remote server

Forse preferisci elencare solo un singolo processo. Nessun problema. Per farlo, specifica il parametro /FI. Il parametro /FI accetta una query che viene passata al tasklist per filtrare processi specifici.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
The output of tasklist showing a specific process

Interrogazione dei processi Windows remoti con PSList

Un altro strumento per visualizzare i processi in esecuzione è PSList, e questa utility fa parte della Suite Sysinternals. Questa suite di strumenti esiste da molti anni ed è stata creata da Mark Russinovich, CTO di Azure!

Cominciamo a vedere come è possibile visualizzare i processi in esecuzione su un computer remoto.

1. Apri una sessione di PowerShell o un prompt dei comandi sul tuo desktop e cambia la directory in quella in cui hai estratto la Suite Sysinternals.

2. Nella tua sessione di PowerShell, esegui il seguente comando per visualizzare i processi in esecuzione sul computer remoto e l’utilizzo della CPU associato in tempo reale.

Il comando seguente esegue pslist per interrogare tutti i processi remoti di Windows sul computer WIN-BANGJIEFNOC autenticando l’utente Administrator (con -u) e la password (con -p).

Il comando utilizza l’opzione -s per attivare la modalità “task manager” di pslist, che aggiorna continuamente l’elenco.

Se è la prima volta che si utilizza uno strumento Sysinternals, potrebbe comparire un banner che chiede di accettare l’ EULA; clicca su OK.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -s

Ora vedrai l’output seguente dall’esecuzione di quel comando; per questo articolo, ti interesserai a 3 di questi valori. Come mostrato di seguito.

  • Nome: Il nome del processo.
  • Pid: Identificatore di processo, un valore critico usato in questo tutorial; il numero PID può essere usato per terminare un processo remoto. È l’ID numerico assegnato a un processo.
  • CPU: Mostra in tempo quasi reale l’utilizzo complessivo della CPU disponibile.

Gli altri valori sono relativi alla memoria e esulano dallo scopo di questo articolo.

Output in real-time of pslist

3. Poiché il passo due ha utilizzato l’opzione -s, premi Ctrl-C per uscire da pslist e tornare alla console.

Riduci l’elenco dei processi restituiti utilizzando l’opzione -e seguita dal nome del processo, ad esempio, -e Winlogon.

Uccidere i Processi per Nome con PSKill

Una volta che sai come individuare i processi remoti, passiamo ora a come ucciderli. Per iniziare, vediamo la pskill utility. Prima di tutto, impara come uccidere i processi per nome.

1. Assicurati di avere un processo che puoi terminare sul tuo server remoto. Questo tutorial utilizzerà il processo Notepad.

2. Apri una sessione di PowerShell o il prompt dei comandi sul tuo desktop locale e cambia la directory in quella in cui hai estratto Sysinternal Suite. Esegui quindi il seguente comando. Puoi vedere che la sintassi per pskill è simile a pslist.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p 'password' -e notepad.exe
Output of pskill

3. Ora, esegui pslist, come spiegato nella sezione precedente, per confermare che il processo sia effettivamente interrotto.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -e notepad.exe
Output of pslist

Uccidere i Processi per ID del Processo con PSKill

Uccidere il processo per nome potrebbe essere sufficiente per le tue esigenze se è in esecuzione solo un’istanza di quel processo o se desideri uccidere tutti i processi con quel nome. Ma cosa fare se vuoi uccidere una particolare istanza di un processo in esecuzione? I seguenti passaggi lo dimostreranno.

1. Sul tuo server remoto, apri Notepad due volte; ucciderai uno di questi processi in questa dimostrazione; naturalmente, puoi sostituire altri processi.

2. Esegui il seguente comando, facendo attenzione a uno dei Pid come mostrato di seguito; ne avrai bisogno per il passo successivo.

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p password -e notepad
Using pslist to list PID’s of Notepad

3. Utilizzando il PID, esegui ora pskill, fornendo il PID come ultimo argomento.

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p password 1984
The output of pskill for a particular PID

4. Infine, verifica che tu abbia ancora un’istanza di Notepad in esecuzione rieseguendo pslist. Dovresti ora vedere solo una singola istanza di Notepad in esecuzione.

Output of pslist

Uccidere i processi remoti di Windows con TaskKill per nome

Il comando taskkill è nativo di Windows e include ulteriori opzioni da riga di comando per riavviare i processi per nome utente e nome dell’applicazione. Iniziamo e uccidiamo di nuovo Notepad!

Uccidi il processo per nome

1. Sul tuo server remoto, apri Notepad; Notepad è il processo che ucciderai in questa dimostrazione; naturalmente, puoi sostituire un altro processo.

2. Apri una sessione PowerShell o il prompt dei comandi sul tuo desktop. Digitando il seguente comando ucciderai notepad.exe

taskkill /S WIN-BANGJIEFNOC.local.net /you administrator /p password /IM notepad.exe

L’output è mostrato di seguito:

/IM è il parametro per Image; in questo caso, è notepad.exe

The output of taskkill command

3. Per confermare che il processo è interrotto, esegui tasklist. Ora dovresti vedere che nessun task corrisponde a quel filtro.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
Output of tasklist using imagename

Uccidere i processi remoti di Windows con TaskKill per PID

Uccidere un processo con taskkill usando un PID non è molto diverso dall’uso del nome del processo. Ma, poiché non puoi usare il nome, dovrai prima trovare il PID e poi passarlo a taskkill.

Assumendo che Notepad sia in esecuzione sul tuo host remoto Windows:

1. Esegui il comando tasklist come mostrato di seguito per trovare il PID del processo Notepad. Prendi nota di uno dei PID come indicato di seguito; ne avrai bisogno per il passo successivo.

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
the output of tasklist to view PIDS

2. Ora, esegui il comando taskkill fornendo il PID come ultimo argomento.

taskkill /S WIN-BANGJIEFNOC.local.net /u administrator /p 'password' /PID 3776
The output of taskkill specifying a particular PID

3. Infine, esegui tasklist per confermare che il processo sia stato interrotto.

Output of tasklist

Uccidere un processo remoto di Windows con PowerShell

PowerShell ti offre un paio di opzioni per uccidere processi remoti; il primo cmdlet Stop-Process non può nativamente uccidere un processo remoto, poiché non ha un’opzione per specificare un nome computer. Ma puoi aggirare questo problema eseguendo Stop-Process in remoto tramite PowerShell Remoting.

1. Se il tuo host e il server remoto non sono in un dominio Active Directory, fornisci prima un nome utente e una password, creando un oggetto PSCredential.

$credentials = Get-Credential
Setting up credentials

2. Successivamente, poiché il tutorial utilizzerà SSL per connettersi al computer remoto e utilizzerà un certificato autenticato, crea un PSSessionOption che ignorerà il controllo del certificato per un’autorità di certificazione affidabile.

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. Ora, connettiti al server con il comando Enter-PSSession, che stabilisce una sessione interattiva con il server remoto.

Il comando di seguito si sta connettendo al computer WIN-BANGJIEFNOC.local.net utilizzando il nome utente e la password forniti sopra (Credential), saltando il controllo dell’autorità di certificazione (SessionOption), e connettendosi tramite SSL (UseSSL).

Enter-PSSession -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -SessionOption $PSSessionOption -UseSSL
Using Enter-PsSession for an interactive session

4. Una volta connesso all’host remoto, controlla il processo che desideri terminare eseguendo Get-Process. In questo caso, vedrai il processo notepad.

Get-Process -ProcessName Notepad
Output of Get-Process

5. Per terminare questo processo, esegui Stop-Process, come mostrato di seguito.

Stop-Process -ProcessName Notepad

6. Infine, conferma di aver terminato il processo eseguendo nuovamente Get-Process, e dovresti ricevere un messaggio di errore.

Checking for Notepad as a running process

Se desideri interrompere un processo remoto di Windows in modo non interattivo, utilizza il comando Invoke-Command utilizzando i seguenti parametri: Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL. Incapsulare il comando Stop-Proces nel parametro ScriptBlock invia il comando all’host remoto.

Conclusioni

Hai appreso metodi diversi per terminare processi remoti e come superare situazioni in cui le regole del firewall di rete potrebbero impedire il corretto funzionamento degli strumenti; questo tutorial potrebbe anche averti aiutato a risolvere problemi su Windows.

Gli strumenti di cui hai appreso sono potenti; usali con attenzione!

Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/