PsExec è un comodo software gratuito che consente di eseguire comandi ed aprire programmi sui PC della rete locale (LAN) senza bisogno né alzarsi dalla sedia, né di installare preventivamente alcunché sulla destinazione. Praticissimo per i power user, si rivela un piccolo gioiello per gli amministratori di sistema in ambienti professionali

med

Ma non basta VNC?

Le soluzioni di controllo remoto (come VNC o Desktop Remoto) sono molto utili per lavorare sul PC principale quando siamo fuori sede. Gli amanti dell'automazione e dello scripting sanno però che si tratta di soluzioni interattive: se la necessità è di eseguire un comando su di un altro sistema, tale approccio è estremamente scomodo... in particolare se si cerca un modo per lanciare uno script di manutenzione oppure l'installazione di un aggiornamento su decine di PC contemporaneamente!

PsExec, se vogliamo tralasciare alcuni dettagli tecnici, è una sorta di SSH altamente semplificato per il mondo Microsoft. È compatibile con tutte le versioni del sistema operativo a finestre, da Windows XP fino a Windows 8.1, passando per le declinazioni "server" e quelle a 64 bit. In più è gratis, anche per uso professionale, e sicuro, dato che i comandi vengono crittografati prima d'esser inviati.

Requisiti e verifiche preliminari

Ci sono un paio di condizioni che devono essere soddisfatte prima di poter utilizzare lo strumento:

  • I due PC devono "vedersi" in rete, ed essere in grado di scambiare file e condividere cartelle
  • Dovete essere in possesso delle credenziali d'accesso (nome utente e password dell'account) del PC remoto
  • L'account remoto che intendete utilizzare deve essere protetto da password
  • Tale account deve essere dotato dei privilegi di amministratore
  • Il PC a cui si accede fisicamente deve essere in grado di raggiungere la condivisione amministrativa ADMIN$ sul calcolatore remoto (non è così di default) ll modo più semplice per verificarlo è aprire il percorso \\NomeComputerRemoto\admin$ e fornire le opportune credenziali. In caso si venisse accolti dall'errore Accesso negato, si veda "Guida: ri-abilitare le condivisioni amministrative (admin$, c$) di Windows" prima di proseguire

Predisporre tutto il necessario

Una volta che i pre-requisiti sono soddisfatti, scaricare il pacchetto "PsTools" (di cui PsExec fa parte) e scompattare PsExec.exe in una directory a piacere: per semplificare notevolmente le fasi successive, raccomando di copiare l'eseguibile nella cartella C:\Windows, ma non è un requisito: così facendo, potrete impartire direttamente psexec.exe senza dover anteporre l'intero percorso di directory per raggiungerlo

med

A questo punto siamo pronti: cercate cmd nella schermata Start e avviate Prompt dei comandi. Impartite quindi semplicemente psexec. Dopo aver accettato la licenza d'uso (proposta solo al primo avvio), dovreste ottenere una videata di riepilogo con tutti i parametri previsti

med

Così non fosse, vi raccomando nuovamente di copiare il file PsExec.exe nella directory C:\Windows e riprovare.

Eseguire un comando sul PC Windows in rete

Arrivati a questo punto, siamo pronti a lanciare il primo comando sul sistema remoto. Il formato generale per usare PsExec è questo:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d "C:\Percorso remoto\dell'eseguibile\da lanciare.exe"

In particolare:

  • \\NomeComputerRemoto: indicate qui il nome del PC remoto sul quale volete eseguire il vostro comando - in alternativa, funziona anche l'indirizzo IP
  • -u "NomeUtenteRemoto": abbiamo detto prima che è necessario disporre di un account valido sul sistema remoto. Indicate il nome utente sostituendolo a NomeUtenteRemoto
  • -p "PasswordUtenteRemoto": sostituite a PasswordUtenteRemoto la password associata all'account indicato
  • "C:\Percorso remoto\dell'eseguibile\da lanciare.exe": sostituite questa stringa con il percorso completo dell'eseguibile che desiderate avviare. Notate che tale file deve già essere presente sul sistema remoto (vedremo in seguito come comportarsi altrimenti)

Nota: i dI doppi apici (") che racchiudono i vari parametri sono fondamentali in caso questi contengano spazi. Consiglio comunque di mantenerli a prescindere.

A titolo di esempio, andrete concretamente a lanciare qualcosa del genere:

psexec.exe \\miopc -u "Gianluigi Zanettini" -p "123456" -i -d "C:\Windows\system32\notepad.exe"

Se tutto va per il verso giusto, sul sistema remoto apparirà il blocco note.

Qualche altro esempio semplice

  • Aprire la calcolatrice sul PC con indirizzo IP 192.168.0.10: psexec.exe \\192.168.0.10 -u "Gianluigi Zanettini" -p "passwordsegreta" -i -d "C:\Windows\system32\calc.exe"
  • Mostrare la versione di Windows in uso sul PC del salotto: psexec.exe \\pc-salotto -u "Gianluigi Zanettini" -p "123456" -i -d "C:\Windows\system32\winver.exe"
  • Aprire Internet Explorer sul computer con il nome di rete "portatile": psexec.exe \\portatile -u "Gianluigi Zanettini" -p "123456" -i -d "C:\Program Files (x86)\Internet Explorer\iexplore.exe"
  • Lanciare un comando passando parametri (nello specifico: Firefox senza componenti aggiuntivi): psexec.exe \\portatile -u "Gianluigi Zanettini" -p "123456" -i -d "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -safe-mode

Creare un collegamento per agire con un solo click

È evidente che digitare manualmente una stringa così lunga ogni volta che abbiamo bisogno di lanciare un comando remoto finisce per essere frustrante e ben poco pratico sul lungo periodo. La soluzione è quella di creare un collegamento all'invocazione di PsExec.

La procedura è quella già illustrata molte altre volte: click con il pulsante destro del mouse in un'area vuota, Nuovo -> Collegamento. Da qui, inserire l'intero comando di PsExec con tutti i parametri e gli argomenti alla prima pagina della breve procedura guidata, ed un nome a piacere per il collegamento nella seconda.

Vi raccomando di eseguire sempre preventivamente varie prove con PsExec dal prompt di comando, di modo da assicurarvi che tutto funzioni, prima di creare i relativi collegamenti: risulterà così più facile diagnosticare e prevenire i problemi.

Aprire una shell testuale sul sistema remoto

Fino ad ora abbiamo visto come aprire programmi sul sistema remoto senza poi interagirvi (ad esempio, abbiamo aperto il blocco note a schermo ma, poi, non abbiamo digitato testo). PsExec consente però anche di aprire un prompt dei comandi locale nel quale impartire molteplici istruzioni che vengono eseguite dal sistema remoto. Il comando per farlo è simile a questo:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" cmd.exe

In questa circostanza risulta prezioso l'uso di hostname, grazie al quale potremmo visualizzare al volo su quale computer stiamo lavorando

med

Copiare un programma ed eseguirlo automaticamente

Ora ci siamo "scaldati" lanciando programmi che già erano memorizzati sul disco remoto, possiamo passare al gradino successivo: lanciare un programma che, al momento, è salvato solamente sul PC locale. Si procede in modo analogo a quanto visto fino a poco fa, ma il comando è ora simile a questo:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d -c -f "C:\Percorso locale\dell'eseguibile\da lanciare.exe"

Rispetto a prima, osserviamo che ci sono alcune variazioni nei parametri:

  • -c -f: il primo indica a PsExec che vogliamo eseguire un programma attualmente memorizzato in locale, che dovrà quindi preventivamente trasferito sulla destinazione. Il secondo sta a significare che vogliamo sovrascrivere eventuali copire preesistenti
  • "C:\Percorso locale\dell'eseguibile\da lanciare.exe": se prima indicavamo il percorso remoto dell'eseguibile (poiché, appunto, il file era già disponibile sul disco remoto), ora dobbiamo specificare il programma locale che sarà copiato e lanciato.

Se tutto va per il verso giusto, il software in questione verrà aperto come voluto sulla destinazione.

med

Sappiate però che PsExec memorizza i file trasferiti in questo modo nella cartella C:\Windows del PC remoto, senza mai eliminarli. Bisogna ricordasi quindi di fare un po' di pulizia manualmente! ad esempio, se l'eseguibile che avete copiato e lanciato si chiamava programma.exe, questa chiamata è sufficiente per sbarazzersene:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d -s cmd.exe /C del "C:\Windows\programma.exe" /Q

Si noti qui la presenza del parametro -s, indispensabile per ottenere i massimi privilegi necessari per scrivere nella cartella di sistema.

Installare un programma da remoto

Utilizzando il metodo appena proposto possiamo installare alcuni programmi sui sistemi remoti in modo davvero immediato.

Procuratevi innanzitutto il setup del vostro applicativo preferito (VLC media player, ad esempio) e consultate la documentazione per capire quale parametro passare all'eseguibile per avviare l'installazione automatica silenziosa: si tratta, generalmente, di -s oppure /s o /q.

Salvatelo sul disco locale e, con la stessa tecnica descritta in precedenza, eseguitelo sul PC remoto. Per installare VLC media player, in particolare, si userà un comando simile a questo:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d -c -s -f "C:\Users\NomeUtenteLocale\Downloads\vlc-2.1.5-win32.exe" /S 

Dopo pochi istanti di elaborazione, il software dovrebbe essere installato. Per verificarlo, provate ad eseguirlo!

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto"  -i -d "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"

med

Se tutto funziona, ricordate di eliminare la procedura di setup depositata in C:\Windows come evidenjziato in precedenza.

La tecnica funziona al meglio con le procedure di installazione composte da un singolo file. Con un po' di inventiva, però, è possibile installare anche soluzioni più corpose, come Microsoft Office: la procedura completa prevede di combinare PsExec ad un'installazione "unattended" di Office accessibile via rete.

Ancora più libertà, con Nircmd

Agli utenti intraprendenti, segnalo la possibilità di combinare PsExec con l'interessante utility gratuita Nircmd per compiere alcune operazioni meno immediate. Tanto per citare qualche esempio:

zittire il sistema da remoto:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d -c -s -f "C:\Users\NomeUtenteLocale\Downloads\nircmd.exe" mutesysvolume 1

"spegnere" il monitor:

psexec.exe \\NomeComputerRemoto -u "NomeUtenteRemoto" -p "PasswordUtenteRemoto" -i -d -c -s -f "C:\Users\NomeUtenteLocale\Downloads\nircmd.exe" monitor off

e ancora: regolare il volume, aprire o chiudere il drive CD/DVD, arrestare o riavviare servizi, far dire al computer remoto frasi a piacere e via dicendo. Per maggiori informazioni, vi rimando all'articolo "Nircmd amministra Windows dalla linea di comando": l'unica differenza, rispetto a quanto detto in quella sede, è che l'intera chiamata a Nircmd deve essere inserita come argomento di PsExec così come mostrato nei due esempi precedenti.

Per maggiori informazioni...

PsExec non è un programma complesso, ma prevede ancora numerose opzioni che non ho approfondito in questa sede. Come visto in apertura, è possibile stampare la sintassi completa e tutti i parametri accettati impartendo semplicemente psexec.exe.

In alternativa, la pagina web di riferimento propone le stesse informazioni ed ancora qualche esempio in un formato più accessibile, mentre questa lista di FAQ contiene qualche suggerimento per l'uso in scenari particolari ed evidenzia e soluzioni ad alcuni problemi comuni.