Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows Phone
  • Control de la distanță prin cmd. Dezinstalarea de la distanță a programelor folosind WMI

Control de la distanță prin cmd. Dezinstalarea de la distanță a programelor folosind WMI

Bună ziua, dragi cititori! Unii dintre voi s-ar putea să vă fi întrebat cum să eliminați un program de pe un computer la distanță. Cel mai probabil, utilizatorul mediu nu are nevoie de acest lucru, ci de un administrator de sistem retea locala acest lucru poate fi necesar.

Există multe modalități de a elimina și instala software-ul pe computere la distanță. diverse solutiiși software. În acest articol vom analiza soluția această problemă bazat pe instrumentele Windows încorporate.

Ne va ajuta să eliminăm programele de pe mașinile de la distanță Instrumente de management Windows sau mai simplu spus WMI. Tradus în rusă asta este Instrumente de management Windows.

Cum se pornește wmi

Wmi este lansat din linia de comandă. Puteți deschide linia de comandă din „Start -> Toate programele -> Accesorii -> Linie de comandă”, sau pur și simplu apăsați tastele „WIN + R”, se va deschide fereastra „Run” în care în câmpul „deschis” tastați „ cmd" și faceți clic pe "OK" ".

În fereastra de linie de comandă care se deschide, tastați comanda wmicși apăsați „Enter”:

Astfel, am lansat un utilitar de consolă pentru a interacționa cu structura WMI pe un computer local sau la distanță. Acum folosind limbajul de interogare Limbajul de interogare WMI(WQL) se poate face diverse comenzi WMI.

De exemplu, primim tot lista de software instalat pe computerul de la distanță. Pentru a face acest lucru, rulați următoarea interogare:

/node:(numele computerului) product get name

Unde în loc de (numele computerului) înlocuim numele mașinii la distanță și cea locală de la care trebuie să obținem o listă de programe instalate. Este mai bine să includeți numele computerului între ghilimele. Apăsați „Enter”, așteptați ceva timp pentru a colecta informații și obțineți ceva de genul următoarei imagini:

Cum se dezinstalează un program folosind WMI?

Puteți elimina programul folosind următoarea solicitare:

/node:(numele computerului) produs unde nume=(numele programului) apelează dezinstalarea

Unde în loc de (nume computer) introducem numele computerului de pe care programul va fi eliminat, iar în loc de (nume program) numele programului care urmează să fie eliminat ca în lista de software rezultată.

De exemplu, trebuie să eliminăm " Microsoft Office Professional Plus 2010”. Apoi cererea va arăta cam așa:

/node:(home2) produs unde name="Microsoft Office Professional Plus 2010" apelează dezinstalare

Apăsați „Enter” și răspundeți la cererea de ofertă de eliminare a programului Y:

wmic:root\cli>/node:"tep-ws000010" produs unde name="Microsoft Office Professional Plus 2010" apelează dezinstalare
Executați (\\TEP-WS000010\ROOT\CIMV2:Win32_Product.IdentifyingNumber="(90140000-0011—0000-1000-0000000FF1CE)",Name="Microsoft Office Professional Plus 2010",Versiunea 0="0000000FF1CE"),Versiunea 0="0000000FF1CE" Dezinstalați() (D/N/?)? Y

După încercarea de ștergere, va fi afișat un mesaj care vă va informa despre rezultate. Dacă ștergerea are succes, mesajul va arăta astfel:

Executarea metodei cu succes.
Parametri de ieșire:
instanță de __PARAMETERS
{
ReturnValue = 0;
};

Asta e tot! Ne vedem în numerele următoare!

În zilele noastre chiar și pentru câini a inventat telecomanda .


Revenind la seria Administrator's Notes, aș dori să vorbesc despre opțiunile de lansare a programelor executabile pe computere la distanță. Acest articol va fi de interes pentru cei care nu au încă sisteme management centralizat, dar există deja o înțelegere a plictisirii accesării cu crawlere manuală a stațiilor de lucru și a serverelor. Sau pentru cei care nu sunt interesați de soluții la cheie din cauza lipsei de sportivitate.


Ca exemplu de ce este nevoie de o astfel de lansare de programe, putem cita isteria recentă cu Petya\Not-Petya, când toată lumea s-a grăbit să verifice\dezactiveze SMBv1 și să descarce actualizări. Da, și puteți, de asemenea, să faceți inventar sau să instalați un patch urgent folosind această metodă.


Cândva, am primit un loc de muncă într-o organizație în timpul epidemiei Kido\Conficker. Cel mai într-un mod simplu pentru a afla dacă totul este în regulă în IP-ul companiei, a existat un utilitar frumos de la Kaspersky numit Kido Killer, care a verificat prezența unui virus și l-a eliminat. Porniți programul o sută bună Nu a fost distractiv să folosesc mașini manuale, așa că a trebuit să mă familiarizez cu automatizarea.

Dacă în sistemele de operare *nix, SSH este de obicei folosit pentru lansarea de la distanță, atunci în Windows metodele de lansare a programelor și scripturilor sunt cu adevărat ca nisipul în deșert. Voi analiza principalele opțiuni, atât cunoscute, cât și exotice. Nu voi atinge lucruri atât de evidente precum serverul telnet, mai ales că Microsoft l-a eliminat deja din sistemele de operare moderne.

Metode vechi, testate în timp

Psexec

Acesta este probabil primul lucru care îmi vine în minte când despre care vorbim despre lansarea de la distanță a programelor. Utilitarul de la Mark Russinovich a fost folosit încă de pe vremea Windows NT și este folosit și astăzi. Pe lângă funcția principală, o puteți folosi atât ca Runas, cât și pentru a lansa programe într-o sesiune de utilizator server terminal. Psexec de asemenea, vă permite să setați nucleele procesorului pe care va rula programul și prioritatea acestuia în sistem.


De exemplu, să vedem dacă actualizarea care închide faimoasa vulnerabilitate SMB este instalată pe o listă de computere:


psexec @computers.txt /u USER /p PASS cmd.exe /v /c ""systeminfo | găsiți „KB4012212” || ecou !nume calculator! >> \\server\share\log.txt"""

Fișierul computers.txt conține o listă de computere. Pentru a rula pe întregul domeniu, puteți utiliza \\*. Numele stațiilor de lucru sau serverelor vor apărea în fișierul \\server\share\log.txt fără a fi actualizat. Dacă în domeniu există computere cu *nix la bord sau nu există acces la o resursă de rețea administrativă Administrator $- comanda nu va fi executată pe această mașină, dar procesarea va continua. Pentru a preveni blocarea scriptului de fiecare dată când încercați să vă conectați, puteți seta un timeout folosind tasta -n.


Dacă computerul este oprit, nu vom ști despre asta. Prin urmare, este mai bine să verificați disponibilitatea mașinilor în avans sau să colectați informații despre succesul sau eșecul într-un fișier.


La contra Psexec Poate fi atribuită faptului că, datorită confortului și popularității sale, este adesea folosit de scriitorii de viruși. De aceea sisteme antivirus poate detecta utilitarul ca o amenințare de tip admin la distanță.


În mod implicit, procesul de pe mașina de la distanță rulează ca utilizatorul care rulează Psexec. Dacă este necesar, autentificarea și parola pot fi setate explicit sau puteți utiliza contul SISTEM.

WMIC

Pentru a gestiona sistemele Windows folosind diverse utilitare grafice, se folosește adesea WMI (Windows Management Instrumentation), o implementare a standardului de management WBEM orientat pe obiecte. Ca utilitate cu interfata grafica pentru a lucra cu WMI puteți folosi wbemtest.exe.


Creat pentru a funcționa cu WMI din consolă wmic.exe. De exemplu, pentru a verifica actualizările instalate, în loc de designul înfiorător din exemplul anterior, puteți utiliza comandă simplă:


wmic /node:"servername" qfe get hotfixid | găsiți „KB4012212”

De asemenea, puteți utiliza lista de computere folosind comanda /node:"@computers.txt".


De asemenea, puteți rula programe folosind WMI - sintaxa este extrem de simplă:


wmic /node:"servername" apel proces crea "cmd /c somecommands"

Din păcate, spre deosebire de Psexec, nu veți putea obține rezultate în consolă - va trebui să scoateți rezultatele comenzii într-un fișier.


În mod implicit, procesul de pe mașina de la distanță rulează ca utilizatorul care rulează wmic. Dacă este necesar, autentificarea și parola pot fi setate explicit.

Politicile și scripturile de grup

Dacă opțiunile anterioare nu necesitau un mediu de domeniu, atunci în acest caz va fi necesar un domeniu. Scripturile sunt acceptate atunci când utilizatorul se conectează și se deconectează din sistem, precum și când sistemul este pornit și oprit. Din moment ce toată lumea administrator Windows Le-am întâlnit, nu voi descrie în detaliu cum să le folosesc - vă voi aminti doar unde să le căutați.



Scripturi executate la pornirea și oprirea sistemului.



Scripturi care rulează atunci când utilizatorul se conectează și se deconectează din sistem.


Scripturile configurate în secțiunea utilizator sunt executate în numele utilizatorului, iar în secțiunea computer - sub contul SISTEM.

Sarcini atribuite

Suficient mod interesant, meritând dreptul la viață. Sarcinile programate pot fi create din linia de comandă folosind utilitarul schtasks.exe, executați-le, apoi ștergeți-le. Mai multe detalii despre sintaxă pot fi găsite în documentație, dar voi privi un exemplu de utilizare a sarcinilor programate într-un mediu de domeniu. Să presupunem că trebuie să executăm o comandă cât mai repede posibil, indiferent dacă computerul este oprit sau nu. În acest scop, sunt folosite așa-numitele Preferințe de politică de grup.


Ar trebui să căutați setarea sarcinilor programate în computer sau în configurația utilizatorului - „Setări - Setări panou de control - Sarcini programate”.



Creați o nouă sarcină programată.


Pentru a rula o comandă sau un script ASAP, va trebui să creați o „sarcină imediată (Windows 7 și versiuni ulterioare).” Dacă dintr-o dată au rămas mașini care rulează Windows XP în infrastructură, atunci „Următoarea sarcină (Windows XP)” va funcționa.


Merită să creați mai multe politici cu filtre WMI corespunzătoare sau să creați două sarcini programate diferite într-o singură politică cu direcționare - de exemplu, folosind același filtru WMI. Acest lucru va ajuta la evitarea conflictelor într-un mediu eterogen cu Windows vechi și nou.


Un exemplu de filtru WMI pentru aplicarea unei politici numai pe computere cu Windows XP:


SELECTAȚI * FROM Win32_OperatingSystem WHERE Versiunea LIKE „5.1%” ȘI ProductType = „1”

În caz contrar, procedura de creare a unei sarcini programate este banală. Singurul lucru este că nu uitați să bifați opțiunea „Aplicați o dată și nu aplicați din nou” dacă sarcina nu necesită reluare.



Efectuăm sarcina imediată o singură dată.


Când utilizați astfel de sarcini programate, programul va porni imediat ce computerul primește actualizarea Politica de grup. Acest lucru este convenabil: nu este nevoie să verificați disponibilitatea computerelor în cazul Psexec și wmic și să forțați utilizatorii să repornească mașinile, ca în cazul scripturilor de politică de grup. Dacă este necesar, puteți copia fișierul script local în „Setări - Configurare Windows- Fișiere.


Sarcinile programate vă permit să setați în mod explicit numele de utilizator pentru a rula programul, inclusiv pentru SYSTEM.

Prin registru

Modificarea registrului pe mașinile utilizatorilor este o opțiune ciudată, doar în caz de urgență. Puteți utiliza ramurile Run sau RunOnce. Citiți mai multe despre ele în documentație. Modificarea registrului în sine poate fi efectuată prin politici de grup sau din linia de comandă - de exemplu, cu următoarea comandă:


reg add \\COMPUTER\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v script /t Reg_SZ /d "script.cmd"

În funcție de ramura de registru, procesul va fi executat fie sub utilizatorul conectat, fie sub contul SISTEM.


Există și alte moduri, cum ar fi editarea comenzilor rapide în folderul Startup sau adăugarea unei comenzi rapide la program popular && script.cmd, dar aceste metode sunt deja din seria „posibil, dar nu necesar”.


Acum să trecem la noile instrumente.

Metode noi sau unde fără PowerShell

Fidel numelui său, PowerShell se poate conecta la computere la distanță folosind WMI, RPC și WS-Management (WSMan). Utilizarea ultimei metode necesită o configurare preliminară.


Cmdleturile care nu necesită preconfigurare au de obicei un parametru ComputerName, dar nu au un parametru Session. Puteți vizualiza o listă de astfel de cmdleturi cu comanda:


Obține-Comandă | unde ( $_.parameters.keys -conține „ComputerName” -și $_.parameters.keys -notcontains „Sesiune”)

Pentru a configura WSMan, în general, rulați comanda Activare-PSRemoting-Force. Ea va începe serviciul telecomandă WinRM va scrie excepții în firewall - în principiu, acest lucru se poate face pentru întregul domeniu folosind politici de grup. Configurarea este descrisă mai detaliat în documentație.


Odată ce toate computerele sunt gata să accepte cereri, ne putem conecta folosind cmdleturile PowerShell corespunzătoare. Pentru a verifica conectivitatea, utilizați cmdletul Test-WSMan.



Verificarea conectivității.


Pentru a executa o anumită comandă sau script, se folosește un cmdlet Invocare-Comandă cu următoarea sintaxă:


Invoke-Command -ComputerName COMPUTER -ScriptBlock ( COMMAND ) -credential USERNAME

Unde COMPUTER este numele computerului, COMMAND este numele comenzii și USERNAME este numele de utilizator, dacă este necesar.



Ne uităm la conținutul discului de la un computer la distanță.


Dacă trebuie să obținem o consolă cu drepturi depline - nu de dragul automatizării, ci de dragul controlului unui anumit computer - atunci putem folosi cmdletul Enter-PSSession.



Lucrăm în consola unui computer la distanță.


Permiteți-mi să vă reamintesc că cu ajutorul JEA puteți limita cmdleturile disponibile pentru o astfel de sesiune sau puteți oferi acces celor de care aveți nevoie fără drepturi de administrator.


Desigur, pe lângă instrumentele încorporate și utilitati mici, există multe programe de gestionare a structurii. Pe lângă soluțiile pentru adulți, instrumente de monitorizare precum Zabbix și chiar consola de management antivirus Kaspersky pot fi folosite pentru a gestiona configurații precum Chef, Ansible și MS SCCM.


Într-o perioadă de structuri eterogene, ar fi frumos să poți gestiona Windows și Linux în mod unificat. Acest lucru se poate face și cu folosind PowerShell, care în sine este demn de un articol separat - merită să faci asta sau este deja inutil?


Etichete: Adăugați etichete

Această lecție va arăta cum să ștergeți un fișier prin linia de comandă în Windows(7, 8, XP, Vista). Comenzile DEL sau ERASE vă vor ajuta în acest sens, care sunt folosite atunci când nu puteți în mod obișnuitștergeți un fișier. Pentru , DEL și ERASE nu sunt potrivite.

Desigur, pentru început. Cu această acțiune veți obține cele mai bune rezultate.

Dacă utilizați această lecție, atunci fișierul va fi șters imediat, fără a fi trimis la coșul de gunoi.

În cmd tastați DEL /? și apăsați Enter pentru a previzualiza opțiunile de comandă. Dacă ați făcut-o corect, veți vedea o explicație (captură de ecran de mai jos).

Folosind cmd la pornirea Windows

Uneori devine necesar să intrați în cmd înainte de a porni sistemul. Acest lucru se datorează faptului că malware-ul blochează autentificarea cu succes sau sectorul de boot sistemul este deteriorat, atunci următorii pași vă vor ajuta:

  1. Deschideți promptul de comandă când Windows pornește
  2. În cmd introduceți DiskPartși apăsați Enter
  3. În continuare, va trebui să scrieți volumul listei și să apăsați din nou pe Enter (vezi captura de ecran de mai jos). Acest lucru vă va permite să vedeți litera unității în care doriți să ștergeți fișierul.
  4. După ce primiți informațiile, tastați exit și faceți clic pe Enter.

Acum nu ezitați să introduceți opțiunile pentru comenzile de eliminare, care sunt descrise mai jos.

Cu acești pași veți șterge orice fișier de pe computer folosind linia de comandă.

Ștergerea unui anumit fișier

Pentru a șterge un anumit element, trebuie să cunoașteți numele și extensia acestuia. În caz contrar, probabilitatea de a șterge lucrul greșit crește!

În cmd, introduceți următoarea comandă și apăsați enter:

DEL /F /S /Q /A „Calea completă a elementului cu extensie”

De exemplu, dacă vreau să șterg cu numele „șterge” și cu extensia (.bat), aflată pe unitatea C în folderul „coș de gunoi”, trebuie să introduc comanda:

DEL /F /S /Q /A „C:\trash\delete.bat”

Ștergeți toate fișierele cu și fără confirmare din linia de comandă

În acest caz, trebuie să confirmați sau să respingeți acțiunile cu litere (Y - da / N - nu) pentru a șterge toate fișierele din directorul principal și subfolderele.

Pentru a confirma, utilizați această sintaxă:

DEL /F /S /Q /A „Calea completă către dosar\*”

Dacă trebuie să șterg toate fișierele de pe unitatea D din folderul Trash, care conține multe alte directoare și fișiere, aș folosi comanda:

DEL /F /S /Q /A „D:\adaugă în coș\*”

Pentru a ștergeți fișierul din linia de comandă cu confirmare, /P este adăugat la parametri și arată astfel:

DEL /P /F /S /A „D:\experiment\*”

Este posibil să ștergeți toate fișierele cu o anumită extensie, apoi comanda va arăta astfel:

DEL /F /S /Q /A „Calea completă către dosar\*.extensie”

Este util mai ales atunci când există o mulțime de elemente inutile de același tip care nu sunt o opțiune de sortat manual, ci pot fi șterse pur și simplu în loturi din cmd.

Cu abordarea corectă, poți ștergeți fișierul prin linia de comandă, în câteva secunde. Sper că recomandările au fost utile. Dacă sunteți interesat de cmd, vă sfătuiesc să citiți materialul, care nu va fi mai puțin interesant.

Utilitare precum Telnet și programe de management de la distanță precum Symantec PC Anywhere vă permit să rulați programe pe sisteme la distanță, dar nu sunt la fel de ușor de instalat deoarece trebuie să instalați și software-ul client pe sistemele de la distanță pe care doriți să le accesați. PsExec este o versiune ușoară a Telnet. Vă permite să executați procese pe sisteme la distanță folosind toate caracteristicile interfeței interactive. aplicații de consolă, și nu este nevoie să instalați manual software-ul client. Principalul avantaj al PsExec este capacitatea de a apela interactiv interfața liniei de comandă pe sistemele de la distanță și de a rula instrumente de la distanță precum IpConfig. Acesta este singurul mod de afișare calculator local date despre sistemul de la distanță.

Notă. niste scanere antivirus raportați că unul sau mai multe dintre aceste programe sunt infectate cu virusul „admin la distanță”. Niciunul dintre programele incluse în suita PsTools nu conține viruși, dar au fost folosiți de viruși, motiv pentru care apar aceste avertismente.

Instalare

Doar copiați programul PsExec în folderul dvs. executabil. Când introduceți comanda psexec, este afișat ajutor despre sintaxa comenzii.

Programul PsExec rulează pe sistemele de operare Windows Vista, NT 4.0, Win2000, Windows XP și Server 2003, inclusiv versiunile pe 64 de biți ale sistemului de operare

Utilizare

În articolul lui Mark Russinovici din numărul Jurnal Windows Revista IT Pro din iulie 2004 descrie metode suplimentare de lucru cu programul PsExec.

utilizare: psexec [\\computer[,computer2[,...] | @fișier][-u utilizator [-p parola]][-n s][-l][-s|-e][-x][-i [sesiune]][-c [-f|-v]] [-w director][-d][-<приоритет>][-a n,n,... ] program [argumente]

calculator

Spune PsExec să ruleze aplicația computerul specificat sau computere. Dacă numele computerului nu este specificat, PsExec va lansa aplicația în sistem local, dacă în loc de numele computerului este specificat caracterul asterisc (\\*), atunci programul PsExec va lansa aplicația pe toate computerele din domeniul curent.

@fişier

Spune PsExec să ruleze aplicația pe toate computerele listate în fișierul text specificat.

Procesoarele pe care poate rula aplicația sunt separate prin virgule, iar procesoarele sunt numerotate începând de la 1. De exemplu, pentru a rula aplicația pe procesoarele doi și patru, introduceți „-a 2,4”

Programul specificat este copiat în sistemul de la distanță pentru execuție. Dacă acest parametru nu este specificat, aplicația trebuie să fie localizată în folderul de sistem al sistemului la distanță.

Indică faptul că nu este nevoie să așteptați ca cererea să se completeze. Această opțiune ar trebui utilizată numai atunci când rulați aplicații non-interactive.

Profilul de cont specificat nu este încărcat.

Programul specificat este copiat pe sistemul de la distanță, chiar dacă un astfel de fișier există deja pe sistemul de la distanță.

Programul lansat obține acces la desktopul sesiunii specificate pe sistemul de la distanță. Dacă nu este specificată nicio sesiune, procesul rulează într-o sesiune de consolă.

Când începe un proces, utilizatorului i se oferă drepturi limitate(drepturile grupului Administratori sunt revocate și utilizatorului i se acordă doar drepturile atribuite grupului Utilizatori). În Windows Vista, procesul începe cu un nivel scăzut de încredere.

Vă permite să setați întârzierea conexiunii la computere de la distanță (în secunde).

Vă permite să specificați o parolă opțională pentru numele de utilizator. Dacă acest parametru este omis, vi se va solicita să introduceți o parolă, iar parola nu va fi afișată pe ecran.

Procesul de la distanță este lansat din contul de sistem.

Vă permite să specificați un nume de utilizator opțional pentru a vă conecta la sistemul de la distanță.

Fișierul specificat este copiat în sistemul de la distanță în locul celui existent numai dacă numărul său de versiune este mai mare sau este mai nou.

Vă permite să specificați directorul de lucru (calea în interiorul sistemului de la distanță) pentru proces.

Afișează interfața cu utilizatorul pe desktopul Winlogon (numai pentru sistemul local).

-o prioritate(o prioritate)

Vă permite să setați diferite priorități pentru un proces: -low (scăzut), -subnormal (sub medie), -abovenormal (peste medie), -high (high) sau -realtime (timp real).

program

Numele programului care urmează să fie lansat.

argumente

Argumente de transmis (rețineți că căile fișierelor trebuie specificate ca căi locale pe sistemul țintă).

Pentru a specifica un nume de aplicație care conține spații, utilizați ghilimele, de exemplu psexec \\marklap "c:\longname\app.exe". Datele introduse sunt transferate la sistemul de la distanță atunci când apăsați tasta „Enter”, pentru a încheia procesul de la distanță trebuie să apăsați combinația de taste Ctrl-C.

Dacă numele de utilizator nu este specificat, atunci proces de la distanță rulează din același cont ca și programul PsExec. Cu toate acestea, deoarece procesul de la distanță este uzurpat, nu va avea acces la resursele rețelei sistem de la distanță. Dacă este specificat un nume de utilizator, procesul de la distanță rulează sub contul specificat și obține acces la aceleași resurse de rețea de pe sistemul de la distanță ca și acesta. Cont. Vă rugăm să rețineți că parola este trimisă la sistemul de la distanță în text clar.

Când accesați un sistem local, această versiune de PsExec poate fi utilizată în locul Runas, deoarece PsExec nu necesită drepturi de administrator.

Exemple

Această comandă afișează interfața interactivă a liniei de comandă pe sistemul \\marklap:

psexec\\marklap cmd

Această comandă rulează programul IpConfig pe sistemul de la distanță cu parametrul /all și afișează datele rezultate pe ecranul sistemului local:

psexec \\marklap ipconfig /all

Această comandă copiează test.exe pe sistemul de la distanță și îl rulează interactiv.

psexec \\marklap -c test.exe

Dacă un astfel de program este deja instalat pe sistemul de la distanță și nu se află în directorul de sistem, specificați calea completă către acest program

psexec \\marklap c:\bin\test.exe

Această comandă rulează Regedit în mod interactiv din contul de sistem pentru a vizualiza datele pentru cheile de registry SAM și SECURITY:

psexec -i -d -s c:\windows\regedit.exe

Această comandă este folosită pentru a apela programul Internet Explorerîn numele unui utilizator cu drepturi limitate:

psexec -l -d „c:\fișiere de program\internet explorer\iexplore.exe”

Una dintre cele mai populare sarcini administratorii de sistem- aceasta rulează o comandă pe un computer de la distanță. Acest lucru poate fi necesar pentru a instala un program sau utilitar, pentru a modifica orice setări etc. Rareori vorbim despre un singur computer, mai des comanda trebuie să fie executată pe mai multe stații de lucru sau servere .

Deoarece această problemă este populară, există multe modalități de a o rezolva. Pornind de la politicile de grup (în care puteți utiliza scripturi de conectare sau de pornire în acest scop) până la sisteme puternice software de management, cum ar fi System Center Essentials sau System Center Configuration Manager. Dar în acest articol vreau să iau în considerare metodele care sunt disponibile imediat din linia de comandă sau fișierele script și, de asemenea, nu necesită preinstalare agenți și alte tulburări. Cu toate acestea, desigur, există câteva cerințe preliminare. De exemplu, ar trebui să ai puteri administrative pe computerul pe care doriți să rulați comanda (cu excepția scenariului „proxy”, dar mai multe despre asta mai târziu).

Una dintre modalitățile mele preferate de a rezolva această problemă este utilitarul de linie de comandă PsExec.exe scris de Mark Russinovich, pe care îl puteți descărca gratuit de pe site-ul web Windows SysInternals. Puteți găsi un link către acesta la sfârșitul articolului. Nu necesită instalare pe sistem, pur și simplu îl puteți copia într-unul dintre folderele conținute în variabila de mediu %path% și îl puteți apela din orice shell de linie de comandă: Cmd sau PowerShell.

Utilizarea PsExec este foarte simplă. De exemplu, pentru a rula ipconfig /flushdns pe computerul principal, rulați următoarea comandă:

psexec\\main ipconfig /flushdns

Comanda ipconfig va fi rulată pe computerul principal folosind datele dvs. de acreditare. După finalizarea ipconfig, toate rezultatele textului vor fi trimise la computer și va fi returnat și un cod de eroare. Dacă comanda a fost executată cu succes, aceasta va fi egală cu 0.

Desigur, capacitățile PsExec nu se termină aici. Apelând utilitarul fără parametri, puteți vizualiza alții Optiuni Disponibile. Voi fi atent doar la câteva dintre ele.

Comutatorul -d îi spune PsExec că nu este nevoie să așteptați ca comanda să fie executată, ci doar rulați-o și uitați-o. În acest caz, nu vom primi rezultate de la utilitarul consolei, dar vom putea lansa altele fără a aștepta finalizarea comenzii anterioare. Acest lucru este foarte util dacă trebuie să rulați, de exemplu, un program de instalare pe mai multe computere.

În mod implicit, PsExec execută comenzi în modul ascuns, adică pe sistemul în care se execută comanda nu vor fi afișate ferestre sau dialoguri. Cu toate acestea, este posibil să schimbați acest comportament folosind comutatorul -i. După aceasta, puteți specifica numărul sesiunii în care să afișați ferestrele, sau nu îl puteți specifica, atunci interfața va fi afișată în sesiunea de consolă.

Astfel, pentru a afișa o fereastră cu informații despre versiune sistem de operare pe computerul principal, ar trebui să rulați PsExec astfel:

psexec -i \\main winver.exe

Dacă doriți să rulați o comandă pe mai multe computere deodată, vă va fi util să le puteți citi numele din fisier text listă.

psexec @c:\comps.txt systeminfo.exe

Ei bine, una dintre cele mai utile abilități ale PsExec este abilitatea de a redirecționa interactiv intrarea/ieșirea între computere, ceea ce ne permite să rulăm, de exemplu, cmd.exe pe server la distanta, și dați-i comenzi și obțineți rezultatele pe computerul local.

Cum funcționează PsExec?

Totul ingenios este simplu. În resursele fișierului executabil PsExec.exe există un alt fișier executabil - PSEXESVC, care este un serviciu Windows. Înainte de a executa comanda, PsExec despachetează această resursă într-un fișier administrativ ascuns folder impartit computer la distanță, în fișierul: \\ComputerName\Admin$\system32\psexesvc.exe. Dacă ați specificat folosind comutatorul -c că trebuie să copiați fișierele executabile în acest sistem, acestea vor fi, de asemenea, copiate în acest folder.

Odată ce pașii pregătitori sunt finalizați, PsExec instalează și pornește serviciul folosind API-ul Windows Service Management. După pornirea PSEXESVC, sunt create mai multe canale între acesta și PsExec pentru a transfera date (comenzi de intrare, rezultate etc.). Odată finalizat, PsExec oprește serviciul și îl elimină de pe computerul țintă.

Windows Management Instrumentation (WMI)

Următoarea modalitate de a implementa această sarcină populară despre care vreau să vorbesc este utilizarea instrumentelor de management Windows. WMI este prezent în toate sistemele de operare Microsoft începând cu Windows 2000, și chiar și pe Windows 9x poate fi instalat din pachet separat. WMI este activat implicit și nu necesită setari aditionale. Pentru a-l folosi este suficient drepturi administrative, și protocolul DCOM permis pe firewall. WMI oferă capabilități enorme pentru gestionarea sistemelor, dar acum suntem interesați doar de unul dintre ele.

Pentru a porni procesele, avem nevoie de metoda Create a clasei Win32_Process. Este destul de ușor de utilizat. În PowerShell, acest lucru se face astfel:

$Computer = "principal"
$Command = "cmd.exe /c systeminfo.exe >
("\\$Computer\root\cimv2:Win32_Process").create ($Command)

Aici am specificat cmd.exe ca proces care urmează să fie lansat și am transmis comanda necesară ca argumente. Acest lucru este necesar dacă trebuie să utilizați variabilele de mediu ale computerului la distanță sau instrucțiunile cmd.exe încorporate, cum ar fi „>” pentru a redirecționa ieșirea către un fișier. Metoda Create nu așteaptă finalizarea procesului și nu returnează rezultate, dar ne spune identificatorul său – ProcessID.

Dacă utilizați un computer care nu are încă instalat PowerShell, puteți apela și această metodă WMI dintr-un script VBScript. De exemplu astfel:

Lista #1 – Pornirea unui proces folosind WMI (VBScript)

Computer = „PC3”
Comanda = "cmd.exe /c systeminfo.exe > \\server\share\%computername%.txt"
Set objWMIService = GetObject("winmgmts:\" & Computer & "\root\cimv2:Win32_Process")
Rezultat = objWMIService.Create("calc.exe", Null, Null, intProcessID)

Dar este mult mai ușor să utilizați utilitarul de linie de comandă wmic.exe care oferă suficient interfață ușor de utilizat pentru lucrul cu WMI și este inclus în sistemele de operare începând cu Windows XP. În el, pentru a lansa, de exemplu, un calculator pe computerul principal, rulați următoarea comandă:

wmic /node:procesul principal apel create calc.exe

Desigur, capabilitățile WMI nu se limitează doar la lansarea proceselor. Dacă sunteți interesat să studiați în continuare această tehnologie, vă recomand să citiți articolele lui Konstantin Leontiev despre WMI, link-uri către care puteți găsi la sfârșitul articolului.

WSH Remote Scripting

Da, destul de ciudat pentru Windows Script Host De asemenea, este posibil să rulați scripturi pe alte computere. Adevărat, această funcție nu a câștigat prea multă popularitate, cel mai probabil datorită faptului că necesită prea multe măsuri pregătitoare și, în schimb, oferă foarte puține oportunități. Dar încă vă voi spune despre această metodă, deoarece poate fi utilă.

Deci, pentru a rula scriptul pe alt computer folosind WSH, va trebui să facem următoarele:

Drepturi de administrator pe computerul de la distanță. Acest lucru este de la sine înțeles și este necesar pentru aproape toate celelalte metode de lansare enumerate în acest articol. Permiteți WSH Remote Scripting prin crearea unui parametru șir Remote în registrul de sistem egal cu „1” în cheia de registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings Din cauza erorii descrise în articolul bazei de date Cunoștințe Microsoft numărul 311269, pe sistemele Windows XP poate fi necesar să rulați comanda wscript –regserver Dacă computerele dvs. folosesc un firewall, atunci acesta trebuie să permită apeluri DCOM. Mai mult, acest lucru trebuie făcut nu numai pe computerul administrat, ci și pe cel de pe care doriți să rulați scriptul. Pe sistemele Windows XP cu Service Pack 2 și o versiune ulterioară, trebuie să modificați setările de securitate DCOM. Acest lucru se poate face folosind Politica de grup. În nodul Configurare computer\Setări Windows\Setări de securitate\Politici locale\Opțiuni de securitate, permisiunile ar trebui setate după cum urmează: DCOM: Restricții de acces la mașină în sintaxa SDDL (Security Descriptor Definition Language)
Acordați accesul anonim și permisiunile tuturor Permite accesul local și permite accesul la distanță DCOM: Restricții de lansare a mașinii în sintaxa SDDL (Security Descriptor Definition Language)
Acordați permisiuni grupului de administratori Permite lansare locală, Permite lansare de la distanță, Permite activare locală, Permite activare de la distanță
Grupul tuturor – Permite lansarea locală, Permite activarea locală

Ei bine, după toate aceste proceduri, puteți încerca să rulați scriptul pe alt computer.

Un exemplu de script care utilizează această tehnologie:

Lista #2 – scripting la distanță WSH (VBScript)

Set objController = CreateObject("WshController")
Setați objRemoteScript = objController.CreateScript("C:\test.vbs", "PC5")WScript.ConnectObject objRemoteScript, "remote_"
objRemoteScript.Execute
Do While objRemoteScript.Status 1
WScript.Sleep 1000
Buclă
MsgBox „Scriptul finalizat”
Sub remote_Error
Dim objError
Setați objError = objRemoteScript.Error
WScript.Echo "Eroare - Linie: " & objError.Line & _
", Char: " & objError.Character & vbCrLf & _
"Descriere: " & objError.Description
WScript.Ieșire –1
End Sub

Pe a doua linie, calea către fișierul script care va fi executat pe computerul la distanță și numele real al acestui computer sunt specificate ca parametri pentru funcția CreateScript.

Planificator de sarcini

Programatorul de sarcini poate fi controlat din linia de comandă folosind două utilitare - at.exe și schtasks.exe. Ambele utilitare vă permit să specificați numele unui computer la distanță pentru a crea o sarcină și, prin urmare, vă permit să rezolvați problema noastră. Dar ne vom uita doar la schtasks.exe în detaliu, deoarece oferă mult mai multe funcționalități.

Deși executarea comenzilor pe alte computere nu este scopul principal al planificatorului, acesta vă permite totuși să implementați multe scenarii interesante. De exemplu, îl puteți folosi pentru a activa instalarea software-ului în timpul pauzei de prânz. Sau dacă utilizatorii tăi iau prânzul la timp diferit, pornirea poate fi efectuată după o anumită perioadă de inactivitate a computerului.

schtasks /create /s server6.td.local /tn install /tr \\main\data\install.cmd /sc o dată /st 13:00 /ru sistem

Este important să înțelegeți sub ce cont va fi îndeplinită sarcina. În acest exemplu, am setat parametrul /ru la sistem, prin urmare, pentru a finaliza configurarea contului de computer, va fi necesar accesul de citire la contul de computer. folderul de rețea cu distribuirea programului.

O altă soluție utilă, mi se pare, este să programați o acțiune pt execuție zilnică, și ștergeți sarcina numai atunci când succesul acesteia este confirmat. Adică, puteți crea un fișier batch simplu care lansează mai întâi programul de instalare, așteaptă finalizarea acestuia și verifică dacă programul a fost instalat cu succes. Dacă da, elimină jobul din programatorul de pe acel computer. Un exemplu de astfel de fișier:

Lista nr. 3 – Instalarea programului și apoi ștergerea sarcinii (Windows Batch)

msiexec /qn /pachet \\server\share\subinacl.msi
dacă există „c:\program files\Windows Resource Kits\Tools\subinacl.exe” (
subinacl /tn Instalare_Subinacl /f
)

WinRM (gestionare WS)

WinRM este o implementare a standardului deschis DMTF (Distributed Management Task Force) de la Microsoft care permite gestionarea sistemelor folosind servicii web. Nu voi aprofunda structura tehnologiei, ci voi descrie doar pe scurt ceea ce este necesar pentru a o folosi.

WinRM versiunea 1 și superioară este inclusă în sistemele de operare începând cu Windows Vista și Windows Server 2008. Pentru Windows XP și Windows Server 2003, puteți instala WinRM ca pachet separat (vezi link-uri).

Pentru a configura rapid computerul pentru conexiuni la acesta folosind porturi standard și permițând conexiuni la conturi administrative, trebuie doar să rulați comanda:

winrm quickconfig

Pentru a împiedica winrm să solicite confirmarea, puteți adăuga comutatorul -quiet la apel. Puteți afla informații despre reglarea fină a ajutorului winrm încorporat:

winrm ajutor config

Dacă un server web rulează pe un computer gestionat, WinRM nu va interfera cu acesta în niciun fel, deși utilizează implicit porturi HTTP standard. Acesta va intercepta doar conexiunile destinate special pentru acesta.

Desigur, nu este necesar să rulați această comandă manual pe fiecare computer pe care doriți să îl gestionați. Toate setările necesare pot fi făcute cu ușurință folosind politicile de grup. Pentru a face acest lucru aveți nevoie de:

Configurați serviciul WinRM (Windows Remote Management) pentru a porni automat Configurați elementul de politică de grup Configurare computer\Șabloane administrative\Componente Windows\Gestionare la distanță Windows (WinRM)\Serviciul WinRM\Permite configurarea automată a ascultătorilor. Aici trebuie să specificați intervalele de adrese IP de la care sunt permise conexiunile. Desigur, va trebui să permiteți și conexiunile la porturile corespunzătoare (80 în mod implicit) în paravanul de protecție Windows.

Indiferent dacă se folosește portul HTTP (80) sau HTTPS (443), traficul transmis de WinRM este criptat (cu excepția cazului în care, desigur, dezactivați această opțiune). Protocolul de autentificare implicit este Kerberos.

Dar destule despre setări, să trecem direct la utilizare. Deși utilitarul winrm vă permite să configurați serviciul WinRM, precum și să efectuați, de exemplu, interogări WMI, suntem mai interesați de altul - winrs. Literele RS de aici reprezintă Remote Shell. WinRS funcționează foarte asemănător cu PsExec, deși folosește tehnologia WinRM. Numele computerului este specificat cu comutatorul -r, urmat de comanda care urmează să fie executată. Aici sunt cateva exemple:

winrs -r:Core ver.exe

Deoarece winrs folosește deja cmd.exe ca shell la distanță, puteți accesa cu ușurință variabilele de mediu la distanță în comenzi sau puteți utiliza alte comenzi încorporate cmd.exe:

winrs -r:Core „dir c:\temp > c:\temp\list.txt”

La fel ca PsExec, utilitarul winrs vă permite să deschideți o sesiune interactivă pe un computer la distanță:

winrs -r:main cmd.exe

Această funcție este similară cu o sesiune telnet, dar utilizarea winrs este cu siguranță mai bună decât telnet și chiar PsExec din punct de vedere al securității. Indiferent dacă portul este HTTP (80) sau HTTPS (443), traficul trimis de WinRM este criptat (cu excepția cazului în care dezactivați această opțiune, desigur). Protocolul de autentificare implicit este Kerberos.

Windows PowerShell 2.0 La distanță

Deși cea de-a doua versiune a Windows PowerShell este încă în testare beta la momentul scrierii, capacitățile sale în domeniul executării comenzilor de la distanță merită să vorbim acum. Puteți încerca singur fie descărcând versiunea de previzualizare (vezi link-uri), fie ca parte a versiunii beta a Windows 7 sau Windows Server 2008 R2.

Infrastructura PowerShell Remoting se bazează pe WinRM versiunea 2.0 și, prin urmare, moștenește toate avantajele acestei tehnologii, cum ar fi criptarea datelor transmise și capacitatea de a lucra peste porturi standard HTTP/HTTPS. Dar datorită oportunităților bogate Limba Windows PowerShell și capacitatea sa de a lucra cu obiecte, obținem mai mult mari oportunități. În acest moment, pachetul WinRM2.0 este și el în testare beta și este disponibil pentru descărcare doar pentru sistemele Windows Vista și Windows 2008. sisteme Windows 7 și Windows Server 2008R2 va fi construit în mod nativ, la fel ca PowerShell 2.0.

Actualizare: Până când articolul a fost publicat pe ItBand.ru, versiunile finale ale PowerShell 2.0 și WinRM 2.0 sunt deja disponibile pentru toate platformele acceptate. În Windows Server 2008R2 și Windows 7 sunt deja incluse ca componente integrale ale sistemului, iar pentru Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, toate componentele necesare pot fi obținute sub forma unui pachet numit Windows. Cadrul de management.

Înainte de a putea profita de toate aceste beneficii, PowerShell Remoting trebuie să fie activat atât pe computerele manageriale, cât și pe cele gestionate. Acest lucru este ușor de realizat rulând cmdletul (comanda Windows PowerShell) Enable-PSRemoting. Mai mult, dacă adăugați cheia -Force, nu va fi solicitată nicio confirmare. Acest cmdlet va apela winrs quickconfig dacă este necesar și va crea excepții în paravanul de protecție Windows, astfel încât nu trebuie să luați pași suplimentari.

După aceasta, puteți executa cu ușurință comenzi pe alte computere folosind cmdletul Invoke-Command (sau alias-ul icm):

Invoke-Command -ComputerName Main -ScriptBlock (dump interfață netsh > c:\ipconfig.txt)

Desigur, comanda poate fi plasată într-o variabilă în prealabil, iar pentru parametrul -ComputerName puteți specifica numele nu unui singur, ci mai multor computere deodată. Următoarea secvență vă permite să afișați versiunea fișierului Explorer.exe de pe trei computere simultan.

$Command = ((get-item c:\Windows\explorer.exe).VersionInfo.FileVersion)
Invoke-Command -ComputerName Main, Server7, Replica -ScriptBlock $Command

După cum puteți vedea, puteți transmite mai multe comenzi simultan într-un bloc, puteți plasa rezultatele execuției lor pe mai multe computere într-o variabilă și apoi le procesați pe stație de lucru folosind caracteristici ferestre PowerShell pentru lucrul cu obiecte.

in orice caz Caracteristici PowerShell Telecomandarea este doar începutul. Puteți utiliza cmdletul Enter-PSSession pentru a vă conecta la o sesiune interactivă Windows PowerShell pe un computer la distanță. Puteți ieși dintr-o astfel de sesiune folosind cmdletul Exit-PSSession sau pur și simplu puteți ieși.

Cmdletul New-PSSession creează sesiuni pe calculatoare la distanță, pointeri la care pot fi plasați într-o variabilă și apoi trecuți ca argument la Invoke-Command pentru a executa comenzi pe mai multe computere simultan, într-un mediu persistent. Puteți vedea un exemplu în captură de ecran, în care execut o secvență de comenzi pe mai multe computere deodată din lista c:\computers.txt.

Proxy

Această metodă diferă de toate cele de mai sus și servește sarcini complet diferite, dar nu este mai puțin relevantă. Atunci când delegarea de autoritate nu este posibilă sau oferă prea multă putere, aceasta permite unui utilizator standard să ruleze o comandă care necesită privilegii administrative fără a acorda în vreun fel autorizare suplimentară sau a compromite parola administratorului.

Cel mai adesea, oamenii rezolvă astfel de probleme folosind utilitare precum cpau.exe (vezi link-urile) care creează un fișier cu o parolă criptată a contului administrativ care vă permite să rulați un program anume. Problema, însă, este că, deși parola este criptată, utilitarul va trebui să o decripteze înainte de a rula programul. În consecință, utilizatorul poate folosi un utilitar care repetă algoritmul de decriptare a parolei și îl poate afla, care poate fi apoi folosit pentru a lansa alte programe sau pentru a obține privilegii suplimentare. În practică, desigur, acest lucru este destul de dificil pentru utilizatorii obișnuiți, care nu au cunoștințe speciale, dar, cu toate acestea, este foarte posibil. Permiteți-mi să clarific încă o dată, aceasta nu este o problemă cu o utilitate specifică, ci o problemă cu această abordare în general.

De asemenea, poate părea că parametrul /savecred al utilitarului runas este potrivit pentru rezolvarea problemei. Dar aici sunt chiar două probleme. În primul rând, ca și în cazul descris mai sus, parola este stocată pe computerul utilizatorului și, prin urmare, poate fi decriptată, deși în cazul runas-ului, aceasta va necesita drepturi. administrator local. În al doilea rând, runas stochează acreditările fără a le asocia cu o anumită comandă și, prin urmare, utilizatorul va putea rula cu drepturi ridicate nu doar comanda la care ai vrut să-i dai acces, ci și oricare alta.

Pentru a evita aceste probleme, dar totuși permite executarea unei anumite comenzi, puteți utiliza o tehnică numită „proxying”.

Funcționează după cum urmează. Un script cu privilegii ridicate rulează constant pe computer. De exemplu, în cazul nostru va fi lansat dintr-un cont care are drepturi de administrator pe serverul de fișiere. La semnalul utilizatorului, acesta va efectua unul, în prealabil o comandă specifică. În acest exemplu, închideți toate fișierele deschise în rețea.

Pentru a organiza acest sistem, îl vom plasa pe server, de exemplu în folderul c:\scripts\ fișiere batch Server.cmd și Action.cmd .

Lista nr. 4 – Server.cmd (Windows Lot)

set trigger=c:\commandShare\trigger.txt
set action=c:\scripts\action.cmd
set log=c:\scripts\log.txt
:start
dacă există %trigger% start %action% și eco %time% %date%>>%log% și del %trigger%
sleep.exe 5
trebuie sa incep

Lista nr. 5 – Action.cmd (Windows Lot)

pentru /f „skip=4 tokens=1” %%a în (‘fișiere net’) faceți fișierele net %%a /close
Ieșire

Server.cmd va aștepta un semn de la utilizator (creând un fișier într-o anumită locație), iar la primirea acestuia, lansează un fișier cu comenzi - Action.cmd. Desigur, utilizatorii nu ar trebui să aibă acces la acest folder. Pornire automată Server.cmd poate fi organizat atunci când computerul pornește prin simpla creare a sarcinii corespunzătoare în planificator:

schtasks /create /ru domain\administrator /rp /sc onstart /tn ProxyScript /tr c:\scripts\server.cmd

După parametrul /ru este indicat contul sub care va fi executat scriptul (în cazul nostru are drepturi de administrator pe server), deoarece după parametrul /rp parola nu este specificată - aceasta va fi solicitată la crearea sarcină. Parametrul /sc vă permite să specificați momentul în care este lansat scriptul, în cazul nostru - când computerul este pornit. Ei bine, /tn și /tr vă permit să specificați numele sarcinii și fișierul executabil.

Acum, pentru ca utilizatorul să semnaleze scriptul, vom crea un folder c:\commandShare și îl vom face accesibil prin rețea. Doar acei utilizatori care vor rula comanda ar trebui să aibă acces de scriere la acest folder.

După aceasta, va fi suficient ca utilizatorul să plaseze fișierul Run.cmd pe desktop.

Lista nr. 6 – Run.cmd (Windows Lot)

echo test > \\server\commandShare\trigger.txt

Când este executat în numele utilizatorului, fișierul \\server\commandShare\trigger.txt va fi creat. Scriptul Server.cmd, după ce l-a observat, va lansa fișierul Action.cmd cu privilegiile sale, va adăuga o intrare în fișierul c:\scripts\log.txt despre ora curentă și apoi va șterge trigger.txt pentru a nu executați comanda din nou până când următorul semnal utilizator.

Scriptul Server.cmd utilizează utilitarul Sleep.exe, care vă permite să întrerupeți execuția scriptului pentru o perioadă de timp specificată în secunde. Nu este inclus în sistemul de operare, dar poate fi luat din Resource Kit Tools (vezi link-uri) și pur și simplu copiat pe orice computer.

Va veni la îndemână

Am decis să învățăm limbă străină? Un profesor de engleză la domiciliu vă va ajuta în acest sens. Acolo poți exersa cu alți utilizatori.

Cele mai bune articole pe această temă