dacă a existat o utilitate de linie de comandă care ar putea concura cu robocopy în ceea ce privește utilitatea, este PsExec. Utilitarul Sysinternals PsExec este la fel de omniprezent ca și cum ar veni într-un arsenal de administrare IT. Acest instrument permite administratorilor să ruleze de la distanță comenzi la fel ca și cum ar fi pe computerul local.

pentru a acoperi instrumentul PsExec în profunzime, a fost potrivit pentru a acoperi acest instrument râvnit într-un ghid ATA Ultimate. În acest ghid, veți afla ce este psexec, ceea ce este capabil de orice multe exemple de modul de utilizare a acestui instrument util.,

cuprins

ce este PsExec.exe?

dacă sunteți nou la acesta sau poate nu ați avut nevoie să rulați comenzi și instrumente pe computere la distanță, este posibil să nu știți ce este psexec.

PsExec sau psexec.exe este un utilitar de linie de comandă construit pentru Windows. Acesta permite administratorilor să ruleze programe pe computere locale și mai frecvent la distanță. Este o parte de utilitate gratuită a suitei Sysinternals pstools construită de Mark Russinovich cu mulți ani în urmă.,a fost construit pentru a înlocui instrumente precum telnet care te-au obligat să deschizi porturi și să introduci vulnerabilități de securitate. În zilele noastre, avem alte opțiuni, cum ar fi PowerShell Remoting și Invoke-Command cmdlet PowerShell, dar PsExec are încă locul său.PsExec permite interactivitate completă pentru aplicația consolă fără a fi nevoie să instalați niciun software. După cum veți vedea prin acest ghid final, PsExec poate lansa prompturi de comandă interactive, poate rula ca sistem local pe computere la distanță, poate rula comenzi pe mai multe computere simultan și multe altele.,aceasta susține toate versiunile de Windows de la Windows XP. Asta înseamnă că da, PsExec pe Windows 10 este și un lucru. Este un instrument simplu pentru a rula care funcționează pe aproape orice, dar nu confunda simplitatea cu capacitățile sale!

cerințe preliminare

pur și simplu trebuie să rulați un sistem de operare Windows modern pentru ca PsExec să ruleze pe computerul local. Cu toate acestea, veți dori să rulați psexec împotriva computerelor la distanță. Pentru a face acest lucru, va trebui să vă asigurați că există câteva elemente.dacă nu aveți aceste elemente în loc acum sau sigur, nu vă faceți griji., În secțiunea următoare, vom acoperi modul de scriere a unor PowerShell pentru a testa computerele la distanță.

  • Un modern computer cu Windows, (locală)
  • Partajare Fișiere și Imprimante deschis (la distanță de calculator, port TCP 445)
  • admin$ administrative cota disponibilă (remote computer)
  • știi un cont local este de acreditare (remote computer)

Ca din acest scris, PsExec este la v2.2 și va fi versiunea veți fi de învățare despre în acest articol.,

instalarea PSexec (cu configurarea computerului la distanță)

tehnic, nu instalați PsExec, deoarece este doar un utilitar de linie de comandă, dar destul de aproape. Deoarece nu este necesară instalarea, trebuie doar să o descărcați și să o extrageți din fișierul zip pstools. PsExec nu este disponibil ca un utilitar independent și face parte din suita de instrumente PsTools.

descărcarea PSExec

puteți extrage fișierul ZIP manual sau aici este un fragment PowerShell la îndemână pentru a descărca și extrage PsExec din fișierul zip pstools. Rețineți că acest lucru elimină toate celelalte instrumente PsTools., Multe sunt încă la îndemână, dar nu le vom acoperi pe cele din acest articol.după ce ați descărcat PsExec, va trebui să vă asigurați că orice computer la distanță pe care îl veți rula este deschis. PsExec are cerințe simple; partajarea fișierelor și imprimantei este activată și cota administrativă admin$ disponibilă.puteți accesa toate computerele de la distanță, puteți deschide appletul Windows Firewall, puteți accesa aplicațiile permise și puteți activa partajarea fișierelor și imprimantelor pe toate computerele, după cum vedeți mai jos.,rețineți că partajarea fișierelor și imprimantelor reprezintă un risc de securitate cunoscut, deci asigurați-vă că numai profilul firewall privat este activat.

Permițându-Fișier și de Imprimare de Partajare în Windows Firewall

Sau ai putea vizita fiecare computer și rulați utilitarul netsh să-l deschid prin:

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

Sau ai putea folosi PowerShell e Set-NetFirewallRule cmdlet-ului să o facă.,

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

Dacă ai prefera să nu viziteze fiecare computer, aveți PowerShell la Distanță disponibil și vă aflați într-un domeniu Active Directory, ai putea, de asemenea, deschide firewall-ul pe mai multe computere la o dată folosind Invoke-Command cmdlet.

folosind PsExec

înainte de a putea rula, trebuie să mergeți. Dacă nu ați folosit niciodată PsExec înainte, sunteți într-un tratament! Asigurați-vă că citiți mai întâi această secțiune pentru a vă uda picioarele pentru a învăța elementele de bază înainte de a sări în capătul adânc mai târziu în acest articol.,

prima dată când rulați PsExec pe un nou sistem, veți vedea imediat acordul de licență PsExec. Va trebui să faceți clic pe butonul de acord pentru a începe să îl utilizați.

PSExec acordul de licență (EULA)

Dacă doriți pentru a preveni acord de licență de a fi afișate, puteți accepta in tacere folosind /accepteula comutator așa cum se arată mai jos.,

> psexec /accepteula

veți învăța câteva trucuri la reducerea la tăcere a acestui pop-up EULA pe computerele locale și la distanță mai târziu în articol.

găsirea ajutorului

când explorați PsExec, nu ar trebui să utilizați niciun comutator. Când pur și simplu executați psexec fără comutatoare, acesta va returna toate opțiunile și o scurtă explicație a ceea ce face fiecare. Toate opțiunile sunt în tabelul de mai jos pentru confortul dumneavoastră.,

Schimb Explicație
-o procesoare Separate pe care aplicația poate rula cu virgule unde 1 este cel mai mic număr de CPU. De exemplu, pentru a rula aplicația pe CPU 2 și CPU 4, Introduceți: „-a 2,4”
-c copiați programul specificat în sistemul de la distanță pentru execuție. Dacă omiteți această opțiune, aplicația trebuie să fie în calea sistemului de pe sistemul de la distanță.,
-d nu așteptați terminarea procesului (non-interactiv).
-e nu încarcă profilul contului specificat.
-f copiați programul specificat chiar dacă fișierul există deja pe sistemul de la distanță.
-i rulați programul astfel încât să interacționeze cu desktopul sesiunii specificate pe sistemul de la distanță. Dacă nu este specificată nicio sesiune, procesul se execută în sesiunea consolei. Unii au raportat cele mai bune rezultate folosind întotdeauna comutatorul-s cu-i din cauza faptului că windows este neinteligibil.,
-h dacă sistemul țintă este Vista sau mai mare, are proc
-l procesul de rulare ca utilizator limitat (benzi grupul administratori și permite numai privilegii atribuite grupului de utilizatori). Pe Windows Vista procesul rulează cu integritate scăzută.
-n specifică timeout în secunde conectarea la computere la distanță.
-p Specifică parola opțională pentru numele de utilizator. Dacă omiteți acest lucru, vi se va solicita să introduceți o parolă ascunsă.,
-r specifică numele serviciului la distanță pentru a crea sau interacționa. cu.
-s rulați procesul de la distanță în contul de sistem.
-u specifică numele de utilizator opțional pentru conectarea la computer.
-v copiați fișierul specificat numai dacă are un număr de versiune mai mare sau este mai nou decât cel de pe sistemul de la distanță.
-w setați directorul de lucru al procesului (relativ
-x Afișați UI pe desktopul securizat Winlogon (numai sistemul local).,
-arm specifică computerul la distanță este de arhitectura ARM.
-prioritate Specifică -low, -belownormal, -abovenormal, -înaltă sau
-în timp real a rula procesul la o altă prioritate. Utilizați
-fundal rulați la memorie scăzută și prioritate I / o pe Vista.
computer Direct PsExec pentru a rula aplicația pe computer sau pe computerele specificate., Dacă omiteți numele computerului PsExec rulează aplicația pe sistemul local și dacă specificați un wildcard (\*), PsExec rulează
@file PsExec va executa comanda pe fiecare dintre computerele listate în fișier.
-accepteula acest steag suprimă afișarea dialogului de licență.
-nobanner nu afișați bannerul de pornire și mesajul privind drepturile de autor.,

Rulează o Simplă Comandă de la Distanță

Cel mai de bază, PsExec necesită doi parametri: un nume de computer și o comandă pentru a executa. Dacă aveți o comandă pentru a rula pe computerul la distanță care nu necesită argumente precum hostname, puteți să o adăugați pur și simplu după numele computerului.

rețineți că dacă nu specificați o cale completă a fișierului, comanda de rulat trebuie să fie în calea utilizator sau sistem., De asemenea, dacă aveți un program cu spații în nume, puteți întotdeauna să închideți programul în spații precum „aplicația mea.exe”.

> psexec \\REMOTECOMPUTER hostname

puteți vedea mai jos că să execute hostname comanda pe CONTOSODC1 computer, puteți defini e UNC calea urmată de comanda. PSExec se va conecta apoi la computerul de la distanță în siguranță, va executa comanda și va returna ieșirea. În acest caz, comanda hostname a returnat numele de gazdă al computerului care este CONTOSODC1.,

dacă comanda nu este cmd sau o altă consolă, PsExec va ieși rapid din sesiunea de la distanță și va returna codul de ieșire din procesul de la distanță returnat.

notă: eroarea sau codul de ieșire returnat de la psexec nu vine de la PsExec în sine. În schimb, vine de la comanda pe care psexec a executat-o pe computerul de la distanță.,

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.,

când procesul nu funcționează 100% corect, poate fi necesar să eliminați manual serviciul folosind comanda sc.

rularea unei comenzi locale Simple

chiar dacă PsExec este cel mai bine cunoscut pentru rularea comenzilor pe computere la distanță, puteți rula, de asemenea, comenzi la nivel local.

puteți rula comenzi la nivel local, pur și simplu nu furnizează un nume de calculator ca mai jos.

> psexec <local command or EXE file>

de ce ai face asta? Un motiv ar fi executarea comenzilor ca cont de sistem local., Puteți utiliza comutatorul -s pentru a rula orice comandă ca sistem local sau de la distanță, după cum veți afla mai multe despre mai târziu.

aruncați o privire la videoclipul scurt de mai jos. Observați că pur și simplu trebuie să furnizați comutatorul -s împreună cu executabilul interpretorului de comandă pentru psexec pentru a lansa o nouă sesiune de comandă ca NT AUTHORITY\SYSTEM.,

Rularea Psexec ca SISTEMUL

PsExec Comenzi (tot Mai Avansate)

Odată ce ai înțeles noțiunile de bază, puteți începe apoi procesul de învățare mai multe tehnici avansate în psexec. PsExec poate face mult mai mult decât să ruleze o singură comandă pe un singur computer.

rularea comenzilor pe mai multe computere

PsExec nu se limitează doar la rularea comenzilor pe un computer la distanță la un moment dat., Acest instrument are, de asemenea, suport pentru copierea programelor și rularea comenzilor pe mai multe computere simultan.puteți rula PsExec pe mai multe computere simultan în câteva moduri diferite.

nume de computer separate prin virgulă

de obicei, atunci când executați o comandă pe un singur computer la distanță, veți specifica un singur nume de computer ca \\REMOTECOMPUTER. De asemenea, puteți specifica mai multe computere separate prin virgule ca mai jos.,

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

Toate Computerele într-un Domeniu Active Directory

Dacă sunteți rulează PsExec pe un domeniu Active Directory s-au alăturat computer și doriți să arunce o comandă de execuție pe toate calculatoarele din acel domeniu, utilizați un wildcard.PsExec va căuta întregul domeniu Active Directory și va încerca să ruleze o comandă pe fiecare computer. Mai jos este un exemplu de sintaxă despre modul în care PsExec va încerca să se conecteze la fiecare computer din domeniul din care face parte computerul Executant și să ruleze comanda hostname.,

Rețineți că, dacă utilizați un asterisc pentru a găsi toate computerele într-un domeniu în timp ce computerul local este parte dintr-un grup de lucru, veți primi eroarea A system error has occurred: 6118.

Folosind un wildcard forțele PsExec, în esență, rulați comanda net view /all să găsească mai întâi de toate calculatoarele din domeniu. Acesta este un mod învechit de a găsi informații despre computer datorită dependenței sale de NetBIOS.

citirea dintr-un fișier

Un alt mod în care puteți rula comenzi pe mai multe computere simultan este să utilizați un fișier text., Folosind sintaxa @<filename.txt>, PsExec va citi fiecare linie din fișierul text ca și cum ar fi un nume de computer. Acesta va procesa apoi fiecare computer individual.

mai jos puteți vedea un exemplu de utilizare a PowerShell pentru a crea un fișier text cu nume de computer delimitate de linie și folosind-o ca intrare pentru psexec.

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

Copierea locale programe pentru calculator de la distanță

cu Ajutorul -c comutator, psexec va copia orice program local de la distanță computer înainte de execuție.,

poate că aveți un EXE pe computerul local într-un C:\Tools dosar și ar dori să-l ruleze pe un computer la distanță. Puteți face acest lucru folosind următoarea sintaxă:

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

atunci Când utilizați -c comutator și nu specificați un fișier executabil, PsExec va copia fișierul, dar veți primi o eroare care să ateste că sistemul nu poate găsi fișierul specificat. Acest lucru se întâmplă deoarece PsExec va încerca întotdeauna să ruleze fișierul pe care îl copiați.,

dacă trebuie să copiați fișiere pe computere la distanță înainte de a utiliza PsExec, utilizați Copy-Item cmdlet PowerShell în schimb.

rularea proceselor la distanță sub acreditări Alternative

Un alt caz de utilizare popular al PsExec este de a rula comenzi sub conturi alternative. În mod implicit, PsExec va încerca să se conecteze la computerul de la distanță sub contul dvs. conectat în prezent. Mai exact, acesta va impersona contul dvs. pe computerul de la distanță.,

cu Ajutorul -u și opțional -p comutator vă permite să conectați la computer la distanță cu un alt cont de utilizator. PsExec va cripta apoi atât numele de utilizator, cât și parola și le va trimite la computerul de la distanță pentru autentificare.

de exemplu, dacă sunteți într-un grup de lucru, va trebui să specificați întotdeauna numele de utilizator pentru a vă autentifica pe computerul la distanță ca.

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

dacă ambele computere sunt membre ale Active Directory, asigurați-vă că prefațați contul de utilizator cu numele de domeniu.,

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

Rețineți că, atunci când nu utilizați -u comutator, psexec impresionează-ți logat în contul de pe computerul la distanță. Nu va avea acces la resurse de rețea.

rularea proceselor ca cont de sistem local

una dintre cele mai utile caracteristici ale rulării PsExec sub un cont alternativ este utilizarea comutatorului -s. Acest comutator permite PsExec (și aplicația dvs. executată de la distanță) să ruleze sub contul de sistem local al computerului de la distanță (sau local).,

notă de mai jos nu am inclus un nume de computer la distanță. PsExec va rula la fel de bucuros și pe computerul local. În acest caz, folosesc opțiunea -s pentru a spune PsExec să lanseze un prompt de comandă local ca cont de sistem LOCAL.,

Rularea psexec ca SISTEMUL LOCAL

Pentru a rula un prompt de comandă ca SISTEMUL LOCAL de pe un computer la distanță, se adaugă numele computerului de referință de mai jos:

> psexec -s \\REMOTECOMPUTER cmd

Lansarea de Aplicații GUI de la Distanță

un Alt util PsExec comutatorul este -i. În mod implicit, PsExec nu permite comenzii executate de la distanță să afișeze ferestre pe computerul de la distanță., Acest lucru este util, deoarece dacă executați comenzi de la distanță, oricum nu veți vedea ecranul.dar poate că trebuie să aduceți programe pentru utilizatorii dvs. Tu personal nu va fi folosind aplicația, dar un utilizator final va. În acest caz, utilizați comutatorul -i.

poate aveți nevoie pentru a aduce o fereastră notepad pe un computer la distanță. Nicio problemă. Rulați notepad.exe cu comutatorul -i și PsExec va deschide Notepad.,

> psexec -i \\REMOTECOMPUTER notepad
Rularea psexec în modul interactiv

Fie sigur de a utiliza, de asemenea, -d comutator pentru a deconecta atunci când fereastra interactiv este adus totuși. În mod implicit, PsExec va aștepta finalizarea procesului pe care l-a executat. Dacă procesul de la distanță (Notepad în acest caz) este continuat să funcționeze, PsExec nu va returna niciodată controlul.,

cu Ajutorul -d comutator cu -i va spune PsExec să nu așteptați de la distanță să se termine procesul. În schimb, se va deconecta și vă va returna controlul imediat ce procesul de la distanță este executat.

redirecționarea ieșirii

Psexec se va baza pe orice ieșire trimisă din procesul de la distanță în sesiunea locală. De obicei, această ieșire va merge direct la consola locală. Dar dacă doriți să o redirecționați, puteți face acest lucru folosind operatori tipici de redirecționare.,

de exemplu, dacă doriți să rulați o comandă și să tăceți toate ieșirile, puteți redirecționa ieșirea și erorile către null folosind ^> nul ^2^&1.

notă caracterele speciale sunt scăpat cu o pălărie. (^).

cazuri de Utilizare PsExec

odată ce ați învățat cum să utilizați psexec, veți întâlni în mod inevitabil diferite cazuri de utilizare specifice. În această secțiune, veți afla câteva cazuri și exemple de utilizare din lumea reală folosind psexec.,

lansarea unui Prompt de comandă la distanță (psexec cmd)

unul dintre cele mai frecvente cazuri de utilizare este lansarea PsExec ca un prompt de comandă interactiv. PsExec nu rulează doar comenzi de la distanță. Se poate trimite, de asemenea, de ieșire de comandă înapoi la consola. Din acest motiv, se poate face o mare telnet (dacă cineva este încă folosind că) Sau poate PowerShell Enter-PSSession înlocuire.

pentru a lansa o comandă la distanță, specificați numele computerului la distanță și rulați aplicația cmd. Cmd este interpretul de comandă Windows., Deoarece PsExec acceptă utilizarea interactivă, se va întoarce cu plăcere un cursor intermitent și un prompt.

> psexec \\REMOTEPC cmd
deschide un prompt de comandă pe un computer la distanță

În acest moment, lumea este de stridii ta. Puteți rula comenzi pe computerul local prin intermediul acestui prompt de comandă „imbricat” și acestea vor fi executate pe computerul de la distanță.

pentru a ieși din promptul de comandă, tastați exit., PsExec va opri procesul cmd de pe computerul de la distanță și va reveni la focalizarea computerului local.

Nu utilizați Ctrl-C pentru a închide o sesiune cmd interactivă. Utilizați întotdeauna exit. Dacă utilizați Ctrl-C, sesiunea psexec va rămâne rulată pe computerul de la distanță.

instalarea Software-ului de la distanță

puteți utiliza PsExec ca instrument de implementare a software-ului unui om sărac. Poate că aveți un instalator MSI de care aveți nevoie pentru a rula pe unul sau mai multe computere la distanță numite setup.IMS., Acest program de instalare trebuie să fie copiat pe computerele de la distanță și apoi executat cu msiexec.utilitate exe cu câteva comutatoare.

mai jos este un exemplu de cum ai putea folosi PsExec pentru a implementa software-ul de la distanță. Acest exemplu copiază configurarea.MSI la computerul de la distanță lansează apoi programul de instalare MSI interactiv ca cont de sistem.

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

acceptarea EULA fără comutatorul /accepteula

așa cum am menționat anterior, prima dată când PsExec rulează, va trebui să acceptați un EULA., Puteți utiliza comutatorul /accepteula, dar puteți, de asemenea, să-l „etapizați” în registru.când este lansat pentru prima dată, PsExec creează o cheie de registru la HKCU\Software\Sysinternals\PsExec. În loc de acea cheie de registru, creează o valoare de registru numită EulaAccepted cu o valoare DWORD de 1.folosind metoda preferată pentru a modifica Registrul pe computerele la distanță, trebuie doar să creați această cheie/valoare pe computerele pe care doriți să rulați PsExec. Odată creat, nu este nevoie pentru a rula /accepteula!,

căsătoria cu PowerShell și PsExec

înainte de PowerShell, tot ce aveam era PsExec. Acum, avem opțiuni. PowerShell poate înlocui PsExec în multe situații, dar îl poate completa în altele.

construirea de nume de calculatoare cu PowerShell

în loc să utilizați \\* pentru a găsi toate computerele din domeniu, puteți utiliza PowerShell în schimb. Folosind PowerShell, nu numai că puteți alege anumite computere, dar nu trebuie să utilizați comportamentul predispus la firewall net view /all.,

puteți utiliza PowerShell pentru a crea un șir care conține toate numele computerului separate printr-o virgulă. Puteți trece apoi acel șir la PsExec, care va procesa Vesel fiecare ca și cum ați tastat fiecare manual.

puteți vedea mai jos un exemplu de utilizare Get-AdComputer cmdlet parte din ActiveDirectory modulul PowerShell.

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

activarea PowerShell Remoting

Dacă aveți computere la distanță pe care preferați să le utilizați PowerShell Remoting în loc de PsExec, puteți utiliza PsExec pentru a le activa.,

prin rularea Enable-PSRemoting sau winrm.cmd fișier batch pe computerele de la distanță, puteți activa rapid PowerShell Remoting pe mai multe computere dintr-o dată.

mai jos puteți vedea un exemplu de apelare a winrm.cmd fișier batch pe un computer la distanță care rulează ca cont de sistem. Deoarece ieșirea din acea comandă nu este necesară, este redusă la tăcere cu 2>&1> $null.

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

Mesaje de eroare PsExec

merită menționat din nou în avans că majoritatea codurilor de eroare pe care le vedeți returnate de la PsExec sunt din procesul de la distanță; nu de la PsExec., Dar este util să înțelegeți aceste coduri de eroare și ce ar putea însemna acestea.dacă doriți o referință la toate codurile de eroare Windows, vă recomand să consultați această listă exhaustivă de coduri de eroare Windows.

mai jos este o listă de coduri de eroare comune pe care le puteți vedea returnate de PsExec.

Cod de Eroare Explicație
-2146232576 în mod normal, returnate prin Windows Update atunci când apare o eroare.,
0 comandă executată cu succes
1 funcție incorectă. S-a întâmplat o problemă. Cam asta e.
1603 Eroare fatală în timpul instalării. Acest lucru este de obicei returnat de msiexec.
2 sistemul nu poate găsi fișierul specificat
4 sistemul nu poate deschide fișierul.
5 accesul este refuzat.
6 mânerul este nevalid.,
6118 lista de servere pentru acest grup de lucru nu este în prezent disponibil

Feedback-ul Dvs.