Se c’era un’utilità da riga di comando che poteva competere con robocopy in termini di utilità, è PsExec. L’utilità Psexec Sysinternals è onnipresente come vengono in un arsenale di amministrazione IT. Questo strumento consente agli amministratori di eseguire in remoto i comandi proprio come se fossero sul computer locale.

Per coprire lo strumento PsExec in profondità, era giusto coprire questo strumento ambito in una guida ATA Ultimate. In questa guida, imparerai cos’è psexec, di cosa è capace qualsiasi molti esempi di come utilizzare questo utile strumento.,

Indice

Che cos’è PsExec.exe?

Se sei nuovo o forse non hai avuto la necessità di eseguire comandi e strumenti su computer remoti, potresti non sapere cos’è psexec.

PsExec o psexec.exe è un programma di utilità da riga di comando costruito per Windows. Consente agli amministratori di eseguire programmi su computer locali e più comunemente remoti. È una parte di utilità gratuita della suite Sysinternals pstools costruita da Mark Russinovich molti anni fa.,

E ‘ stato costruito per sostituire strumenti come telnet che ti ha costretto ad aprire le porte e introdurre vulnerabilità di sicurezza. Al giorno d’oggi, abbiamo altre opzioni come PowerShell Remoting e il Invoke-Command PowerShell cmdlet ma PsExec ha ancora il suo posto.

PsExec consente l’interattività completa per l’applicazione console senza dover installare alcun software. Come vedrai attraverso questa Guida definitiva, PsExec può lanciare prompt dei comandi interattivi, eseguire come sistema locale su computer remoti, eseguire comandi su più computer contemporaneamente e altro ancora.,

Supporta tutte le versioni di Windows da Windows XP. Ciò significa che sì, anche PsExec su Windows 10 è una cosa. È uno strumento semplice da eseguire che funziona su quasi tutto, ma non confondere la sua semplicità con le sue capacità!

Prerequisiti

È sufficiente eseguire un moderno sistema operativo Windows per l’esecuzione di PsExec sul computer locale. Tuttavia, si sta andando a voler eseguire psexec contro i computer remoti. Per fare ciò, è necessario assicurarsi che alcuni elementi siano a posto.

Se non si dispone di questi elementi in atto ora o sicuri, non ti preoccupare., Nella prossima sezione, tratteremo come scrivere alcuni PowerShell per testare i computer remoti.

  • Un moderno computer (locale)
  • Condivisione di File e Stampanti aperto (computer remoto, la porta TCP 445)
  • admin$ amministrativi quota disponibile (computer remoto)
  • conoscete un account locale credenziali (computer remoto)

Come di questa scrittura, PsExec è a v2.2 e sarà la versione imparerai in questo articolo.,

Installazione di PSexec (con configurazione del computer remoto)

Tecnicamente, non si installa PsExec poiché è solo un’utilità da riga di comando ma abbastanza vicina. Poiché non è necessaria alcuna installazione, è sufficiente scaricarlo ed estrarlo dal file zip PsTools. PsExec non è disponibile come utility standalone e fa parte della suite di strumenti PsTools.

Scaricare PSExec

È possibile estrarre il file ZIP manualmente o ecco un pratico frammento di PowerShell per scaricare ed estrarre PsExec dal suo file ZIP pstools. Si noti che questo rimuove tutti gli altri strumenti PsTools., Molti sono ancora a portata di mano, ma non stiamo andando a coprire quelli in questo articolo.

Configurazione del computer remoto

Una volta scaricato PsExec, è necessario assicurarsi che qualsiasi computer remoto su cui verrà eseguito sia aperto. PsExec ha requisiti semplici; Condivisione di file e stampanti abilitata e la condivisione admin administrative administrative disponibile.

È possibile accedere a tutti i computer remoti, aprire l’applet Windows Firewall, accedere alle app consentite e abilitare la condivisione di file e stampanti su tutti i computer come si vede di seguito.,

Si noti che la condivisione di file e stampanti è un rischio noto per la sicurezza, quindi assicurarsi che sia abilitato solo il profilo firewall privato.

Permettendo la Condivisione di File e stampanti in Windows Firewall

Oppure potete visitare ogni computer ed eseguire l’utilità netsh per aprirlo tramite:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

Oppure si potrebbe usare PowerShell Set-NetFirewallRule cmdlet per farlo.,

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

Se preferisci non visitare ogni computer, hai PowerShell Remoting disponibile e sei in un dominio Active Directory, puoi anche aprire il firewall su molti computer contemporaneamente usando il cmdletInvoke-Command.

Usando PsExec

Prima di poter correre, devi camminare. Se non hai mai usato PsExec prima, sei pronto per una sorpresa! Assicurati di leggere prima questa sezione per bagnarti i piedi per imparare le basi prima di saltare nella parte profonda più avanti in questo articolo.,

La prima volta che si esegue PsExec su un nuovo sistema, si vedrà immediatamente il contratto di licenza PsExec venire. Dovrete fare clic sul pulsante Accetto per iniziare ad usarlo.

PSExec license agreement (EULA)

Se si desidera impedire la visualizzazione del contratto di licenza, è possibile accettarlo silenziosamente utilizzando /accepteula interruttore come mostrato di seguito.,

> psexec /accepteula

Imparerai alcuni trucchi per silenziare questo popup EULA su computer locali e remoti più avanti nell’articolo.

Trovare aiuto

Quando si esplora PsExec, non si dovrebbe usare alcun interruttore. Quando si esegue semplicemente psexec senza switch, restituirà tutte le opzioni e una breve spiegazione di ciò che ciascuno fa. Tutte le opzioni sono nella tabella sottostante per la vostra convenienza.,

Switch Descrizione
-a processori Distinti in cui l’applicazione può essere eseguita con le virgole dove 1 è il numero più basso è impegnativo. Ad esempio, per eseguire l’applicazione su CPU 2 e CPU 4, immettere: “-a 2,4”
-c Copiare il programma specificato sul sistema remoto per l’esecuzione. Se si omette questa opzione, l’applicazione deve trovarsi nel percorso di sistema sul sistema remoto.,
-d Non aspettare che il processo termini (non interattivo).
-e Non carica il profilo dell’account specificato.
-f Copia il programma specificato anche se il file esiste già sul sistema remoto.
-i Eseguire il programma in modo che interagisca con il desktop della sessione specificata sul sistema remoto. Se non viene specificata alcuna sessione, il processo viene eseguito nella sessione della console. Alcuni hanno riportato i migliori risultati usando sempre l’interruttore – s con-i a causa del fatto che Windows non è comprensibile.,
-h Se il sistema di destinazione è Vista o superiore, ha il proc
-l Esegui il processo come utente limitato (elimina il gruppo Administrators e consente solo i privilegi assegnati al gruppo Users). Su Windows Vista il processo viene eseguito con bassa integrità.
-n Specifica il timeout in secondi di connessione a computer remoti.
-p Specifica la password opzionale per il nome utente. Se si omette questo vi verrà richiesto di inserire una password nascosta.,
-r Specifica il nome del servizio remoto da creare o interagire. con.
-s Eseguire il processo remoto nell’account di sistema.
-u Specifica il nome utente opzionale per l’accesso al computer.
-v Copia il file specificato solo se ha un numero di versione superiore o è più recente rispetto a quello del sistema remoto.
-w Imposta la directory di lavoro del processo (relativa
-x Visualizza l’interfaccia utente sul desktop sicuro di Winlogon (solo sistema locale).,
-arm Specifica che il computer remoto è di architettura ARM.
-priority Specifica-low, -belownormal, -abovenormal, -high o
-realtime esegui il processo con una priorità diversa. Usa
-background esegui con poca memoria e priorità I / O su Vista.
computer Psexec diretto per eseguire l’applicazione sul computer o computer specificati., Se si omette il nome del computer PsExec esegue l’applicazione sul sistema locale, e se si specifica un carattere jolly (\*), PsExec esegue
@file PsExec eseguirà il comando su ciascuno dei computer elencati nel file.
-accepteula Questo flag sopprime la visualizzazione della finestra di dialogo della licenza.
-nobanner Non visualizzare il banner di avvio e il messaggio di copyright.,

Eseguire un semplice comando remoto

Nella sua forma più elementare, PsExec richiede due parametri: un nome computer e un comando da eseguire. Se si dispone di un comando da eseguire sul computer remoto che non richiede argomenti come hostname, è sufficiente aggiungerlo dopo il nome del computer.

Si noti che se non si specifica un percorso completo del file, il comando da eseguire deve trovarsi nel percorso utente o di sistema., Inoltre, se si dispone di un programma con spazi nel nome, è sempre possibile racchiudere il programma in spazi come ” la mia applicazione.exe”.

> psexec \\REMOTECOMPUTER hostname

Puoi vedere sotto che per eseguire il comandohostname sul computer CONTOSODC1, definisci il suo percorso UNC seguito dal comando. PSExec si collegherà quindi al computer remoto in modo sicuro, eseguirà il comando e restituirà l’output. In questo caso, il comando hostname ha restituito il nome host del computer che è CONTOSODC1.,

Se il comando non è cmd o un’altra console, PsExec uscirà rapidamente dalla sessione remota e restituirà il codice di uscita restituito dal processo remoto.

Nota: L’errore o il codice di uscita restituito da psexec non proviene da PsExec stesso. Invece, proviene dal comando che psexec ha eseguito sul computer remoto.,

Successful psexec remote command execution

How PsExec Works on Remote Computers

PsExec goes through a few steps to execute programs on remote computers.

  1. Create a PSEXESVC.exe file in C:\Windows.
  2. Create and start a Windows service on the remote computer called PsExec.
  3. Execute the program under a parent process of psexesvc.exe.
  4. When complete, the PsExec Windows service will be stopped and removed.,

Quando il processo non funziona correttamente al 100% potrebbe essere necessario rimuovere manualmente il servizio utilizzando il comando sc.

Esecuzione di un semplice comando locale

Anche se PsExec è meglio conosciuto per l’esecuzione di comandi su computer remoti, è anche possibile eseguire comandi localmente.

È possibile eseguire comandi localmente semplicemente non fornendo un nome del computer come di seguito.

> psexec <local command or EXE file>

Perché dovresti farlo? Una ragione sarebbe quella di eseguire comandi come account di sistema locale., È possibile utilizzare l’opzione-s per eseguire qualsiasi comando come SISTEMA localmente o in remoto, come imparerai di più in seguito.

Dai un’occhiata al breve video qui sotto. Si noti che è sufficiente fornire l’opzione-s insieme all’eseguibile dell’interprete dei comandi per psexec per avviare una nuova sessione di comandi come NT AUTHORITY\SYSTEM.,

Esecuzione Psexec come SISTEMA

PsExec Comandi (Sempre Più Avanzate)

una Volta che hai imparato le basi, si può quindi iniziare ad apprendere le tecniche più avanzate in psexec. PsExec può fare molto di più che eseguire un singolo comando su un singolo computer.

Esecuzione di comandi su più computer

PsExec non si limita solo all’esecuzione di comandi su un computer remoto alla volta., Questo strumento ha anche il supporto per copiare programmi ed eseguire comandi su più computer contemporaneamente.

È possibile eseguire PsExec su più computer contemporaneamente in diversi modi.

Nomi di computer separati da virgole

In genere quando si esegue un comando su un singolo computer remoto, si specifica un nome di computer singolo come\\REMOTECOMPUTER. È inoltre possibile specificare più computer separati da virgole come di seguito.,

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

Tutti i computer in un dominio Active Directory

Se si esegue PsExec su un computer collegato a un dominio Active Directory e si desidera eseguire un comando su tutti i computer in quel dominio, utilizzare un carattere jolly.

PsExec cercherà l’intero dominio Active Directory e tenterà di eseguire un comando su ogni computer. Di seguito è riportato un esempio di sintassi su come PsExec tenterà di connettersi a tutti i computer del dominio di cui fa parte il computer in esecuzione ed eseguirà il comando hostname.,

Si noti che se si utilizza un asterisco per trovare tutti i computer in un dominio mentre il computer locale fa parte di un gruppo di lavoro, verrà visualizzato l’errore A system error has occurred: 6118.

L’utilizzo di un carattere jolly costringe PsExec a eseguire essenzialmente il comando net view /all per trovare prima tutti i computer nel dominio. Questo è un modo obsoleto per trovare informazioni sul computer a causa della sua dipendenza da NetBIOS.

Lettura da un file

Un altro modo per eseguire comandi su più computer contemporaneamente è usare un file di testo., Usando la sintassi @<filename.txt>, PsExec leggerà ogni riga del file di testo come se fosse un nome di computer. Sarà quindi elaborare ogni computer singolarmente.

Di seguito puoi vedere un esempio di utilizzo di PowerShell per creare un file di testo con nomi di computer delimitati da linee e utilizzarlo come input per psexec.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txtPS51> psexec @computers.txt hostname

Copia di programmi locali sul computer remoto

Utilizzando l’opzione -c, psexec copierà qualsiasi programma locale sul computer remoto prima dell’esecuzione.,

Forse hai un EXE sul tuo computer locale in un C:\Tools cartella e vorrebbe eseguirlo su un computer remoto. Puoi farlo usando la seguente sintassi:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

Quando usi l’opzione -c e non specifichi un file eseguibile, PsExec copierà comunque il file ma riceverai un errore che indica che il sistema non riesce a trovare il file specificato. Ciò accade perché PsExec tenterà sempre di eseguire il file copiato.,

Se è necessario copiare file su computer remoti prima di utilizzare PsExec, utilizzare il cmdletCopy-Item PowerShell.

Esecuzione di processi remoti con credenziali alternative

Un altro caso d’uso popolare di PsExec è quello di eseguire comandi con account alternativi. Per impostazione predefinita, PsExec tenterà di connettersi al computer remoto sotto il tuo account attualmente connesso. Più specificamente, impersonerà il tuo account sul computer remoto.,

Utilizzando il -u e opzionale -p interruttore consente di connettersi al computer remoto con un account utente alternativo. PsExec crittograferà quindi sia il nome utente che la password e li invierà al computer remoto per l’autenticazione.

Ad esempio, se sei in un gruppo di lavoro, dovrai sempre specificare il nome utente da autenticare sul computer remoto come.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p $$word

Se entrambi i computer sono membri di Active Directory, assicurarsi di inserire nell’account utente il nome di dominio.,

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p $$word

Si noti che quando non si utilizza l’opzione -u, psexec impersona il proprio account connesso sul computer remoto. Non avrà accesso a nessuna risorsa di rete.

Esecuzione di processi come account di SISTEMA LOCALE

Una delle funzionalità più utili per eseguire PsExec con un account alternativo è l’utilizzo dello switch-s. Questa opzione consente a PsExec (e all’applicazione eseguita in remoto) di funzionare con l’account di sistema LOCALE del computer remoto (o locale).,

Avviso di seguito Non ho incluso un nome di computer remoto. PsExec sarà altrettanto volentieri eseguito sul computer locale pure. In questo caso, sto usando l’opzione-s per dire a PsExec di avviare un prompt dei comandi locale come account di SISTEMA LOCALE.,

Esecuzione psexec come SISTEMA LOCALE

Per eseguire un prompt dei comandi come SISTEMA LOCALE su un computer remoto, aggiungere il nome del computer di riferimento, come di seguito:

> psexec -s \\REMOTECOMPUTER cmd

il Lancio di Applicazioni GUI Remota

un Altro utile PsExec interruttore -i. Per impostazione predefinita, PsExec non consente al comando eseguito in remoto di visualizzare le finestre sul computer remoto., Questo è utile perché se stai eseguendo comandi da remoto, non vedrai comunque lo schermo.

Ma forse hai bisogno di far apparire i programmi per i tuoi utenti. Personalmente non utilizzerai l’applicazione ma lo farà un utente finale. In tal caso, utilizzare l’opzione -i.

Forse è necessario aprire una finestra del blocco note su un computer remoto. Nessun problema. Esegui blocco note.exe con l’interruttore-i e PsExec aprirà il blocco note.,

> psexec -i \\REMOTECOMPUTER notepad
Esecuzione psexec in modalità interattiva

assicurarsi di utilizzare il -d interruttore per disinserire quando la finestra interattiva è cresciuto però. Per impostazione predefinita, PsExec attenderà il completamento del processo eseguito. Se il processo remoto (blocco note in questo caso) viene mantenuto in esecuzione, PsExec non restituirà mai il controllo.,

Utilizzando l’interruttore-d con-i si dirà a PsExec di non attendere il completamento del processo remoto. Invece, si disconnetterà e restituirà il controllo non appena viene eseguito il processo remoto.

Reindirizzamento dell’output

Psexec si baserà su qualsiasi output inviato dal processo remoto alla sessione locale. In genere, questo output andrà direttamente alla console locale. Ma se vuoi reindirizzarlo, puoi farlo usando i tipici operatori di reindirizzamento.,

Ad esempio, se si desidera eseguire un comando e silenziare tutti gli output, è possibile reindirizzare l’output e gli errori su null utilizzando^> nul ^2^&1.

Nota i caratteri speciali sono sfuggiti con un cappello. (^).

Casi d’uso di PsExec

Una volta imparato come usare psexec, ci si imbatte inevitabilmente in vari casi d’uso specifici. In questa sezione, imparerai alcuni casi d’uso ed esempi reali usando psexec.,

Avvio di un prompt dei comandi remoto (psexec cmd)

Uno dei casi d’uso più comuni è l’avvio di PsExec come prompt dei comandi interattivo. PsExec non esegue solo comandi da remoto. Può anche inviare l’output del comando alla tua console. Per questo motivo, può fare un ottimo telnet (se qualcuno lo sta ancora usando) o forse PowerShell Enter-PSSession sostituzione.

Per avviare un comando remoto, specificare il nome del computer remoto ed eseguire l’applicazione cmd. Cmd è l’interprete dei comandi di Windows., Poiché PsExec supporta l’uso interattivo, restituirà volentieri un cursore lampeggiante e un prompt.

> psexec \\REMOTEPC cmd
aprire un prompt dei comandi su un computer remoto

A questo punto, il mondo è la tua ostrica. È possibile eseguire comandi sul computer locale tramite questo prompt dei comandi “nidificato” e verranno eseguiti sul computer remoto.

Per uscire dal prompt dei comandi, digitare exit., PsExec interromperà il processocmd sul computer remoto e restituirà lo stato attivo al computer locale.

NON usare Ctrl-C per chiudere una sessione cmd interattiva. Utilizzare sempreexit. Se si utilizza Ctrl-C, la sessione psexec rimarrà in esecuzione sul computer remoto.

Installazione del software in remoto

È possibile utilizzare PsExec come strumento di distribuzione del software per poveri. Forse hai un programma di installazione MSI che devi eseguire su uno o più computer remoti chiamati setup.MSI., Questo programma di installazione deve essere copiato nei computer remoti e quindi eseguito con msiexec.utility exe con alcuni switch.

Di seguito è riportato un esempio di come è possibile utilizzare PsExec per distribuire in remoto il software. Questo esempio copia l’installazione.msi sul computer remoto avvia quindi il programma di installazione MSI in modo interattivo come account di sistema.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

Accettare l’EULA senza l’interruttore/accepteula

Come accennato in precedenza, la prima volta che viene eseguito PsExec, dovrai accettare un EULA., È possibile utilizzare lo switch/accepteula ma è anche possibile “metterlo in scena” nel registro.

Quando viene lanciato per la prima volta, PsExec crea una chiave di registro in HKCU\Software\Sysinternals\PsExec. Invece di quella chiave di registro, crea un valore di registro chiamato EulaAccepted con un valore DWORD di 1.

Utilizzando il metodo preferito per modificare il registro di sistema su computer remoti, è sufficiente creare questa chiave / valore sui computer su cui si desidera eseguire PsExec. Una volta creato, non è necessario eseguire/accepteula!,

Sposare PowerShell e PsExec

Prima di PowerShell, tutto quello che avevamo era PsExec. Ora, abbiamo delle opzioni. PowerShell può sostituire PsExec in molte situazioni, ma completarlo in altri.

Creazione di nomi di computer con PowerShell

Invece di utilizzare\\* per trovare tutti i computer nel dominio, è possibile utilizzare PowerShell. Utilizzando PowerShell, non solo è possibile scegliere determinati computer, ma non è necessario utilizzare il comportamento net view /all soggetto a firewall.,

È possibile utilizzare PowerShell per creare una stringa contenente tutti i nomi dei computer separati da una virgola. È quindi possibile passare quella stringa a PsExec che elaborerà allegramente ognuno come se fosse stato digitato manualmente.

Puoi vedere di seguito un esempio di utilizzo del cmdlet Get-AdComputer parte del modulo ActiveDirectory PowerShell.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

Abilitazione di PowerShell Remoting remoto

Se si dispone di computer remoti si preferisce utilizzare PowerShell Remoting con invece di PsExec, è possibile utilizzare PsExec per abilitarli.,

EseguendoEnable-PSRemoting o il winrm.file batch cmd sui computer remoti, è possibile attivare rapidamente PowerShell Remoting su più computer contemporaneamente.

Di seguito puoi vedere un esempio di chiamata di winrm.file batch cmd su un computer remoto in esecuzione come account di SISTEMA. Poiché l’output di quel comando non è necessario, viene silenziato con 2>&1> $null.

$computerName = 'REMOTECOMPUTER'psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

Messaggi di errore PsExec

Vale la pena ricordare in anticipo che la maggior parte dei codici di errore che vedi restituiti da PsExec provengono dal processo remoto; non da PsExec., Ma è utile avere una comprensione di questi codici di errore e di cosa potrebbero significare.

Se desideri un riferimento su tutti i codici di errore di Windows, ti consiglio di controllare questo elenco esaustivo di codici di errore di Windows.

Di seguito è riportato un elenco di codici di errore comuni che potresti vedere restituiti da PsExec.

Codice di Errore Descrizione
-2146232576 in Genere restituiti da Windows Update quando si verifica un errore.,
0 Comando eseguito con successo
1 Funzione errata. E ‘ successo un problema. Questo è tutto.
1603 Errore fatale durante l’installazione. Questo in genere viene restituito da msiexec.
2 Il sistema non riesce a trovare il file specificato
4 Il sistema non riesce ad aprire il file.
5 L’accesso è negato.
6 L’handle non è valido.,
6118 L’elenco dei server per questo gruppo di lavoro non è attualmente disponibile

il Tuo Feedback