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.
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.
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.,
How PsExec Works on Remote Computers
PsExec goes through a few steps to execute programs on remote computers.
- Create a PSEXESVC.exe file in C:\Windows.
- Create and start a Windows service on the remote computer called PsExec.
- Execute the program under a parent process of psexesvc.exe.
- 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.,
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.,
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
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
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 sempre
exit
. 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 |
Lascia un commento