Geek School Folosind PowerShell pentru a obține informații despre computer
WMI și fratele său mai recent CIM pot fi utilizate atât pentru a gestiona mașinile Windows în mediul dvs. Dar știi diferența dintre ei? Alăturați-vă nouă, când aruncăm o privire.
Asigurați-vă că citiți articolele anterioare din seria:
- Aflați cum să automatizați Windows cu PowerShell
- Învățarea de a folosi Cmdlets în PowerShell
- Învățați cum să utilizați obiecte în PowerShell
- Formatul de învățare, filtrarea și compararea în PowerShell
- Aflați cum să utilizați Remoting în PowerShell
Și stați pe toată săptămâna pentru restul seriei.
Introducere
WMI înseamnă Windows Management Instrumentation. Cuvântul "Instrumentation" se referă la faptul că WMI vă permite să obțineți informații despre starea internă a computerului dvs., la fel ca instrumentele de bord din mașina dvs. pot recupera și afișa informații despre starea componentelor interne ale mașinilor dvs..
WMI constă dintr-un depozit care conține clase care reprezintă componente care ar putea fi gestionate în interiorul mașinii. Cu asta înțelegem doar pentru că WMI are o clasă Win32_Battery nu înseamnă că aparatul conține o baterie. Aceste clase pot fi apoi interogate pentru informații la nivel local sau chiar pe o rețea utilizând o limbă de interogare foarte asemănătoare cu SQL numită WQL. Cu toate acestea, WMI a fost cunoscută a fi foarte nesigură, mai ales datorită faptului că se bazează pe RPC (Remote Procedure Calls), care fac unele lucruri nebunești cu porturile pe care aleg să le comunice.
Începând cu Windows 8 și Server 2012, WMI este eliminat treptat în favoarea Modelului comun de informații sau CIM pe scurt. Singura diferență dintre WMI și CIM este protocolul de transport pe care îl utilizează. În timp ce WMI efectuează interogări utilizând procedurile de apel la distanță, CIM utilizează HTTP, ceea ce pare să facă o diferență enormă. Pe backend vorbesc încă cu același depozit de informații.
Utilizarea WMI
Cea mai rapidă și mai ușoară modalitate de a explora informațiile disponibile prin intermediul WMI este să apucați o copie a oricărui browser WMI Object gratuit. Ne place asta. Odată descărcat, opriți-l și veți avea o interfață grafică pentru a căuta clasele WMI.
Dacă doriți să aflați ceva despre configurația discului unui computer, apăsați combinația de taste Ctrl + F pentru a afișa o casetă de căutare, apoi introduceți "logicaldisk" și apăsați enter.
Imediat, aceasta vă va duce la clasa Win32_LogicalDisk.
În partea de jos a aplicației, puteți vedea că avem două instanțe ale clasei.
Odată ce avem clasa pe care o căutăm, interogarea de la PowerShell este directă.
Get-WmiObject -Query "SELECT * FROM Win32_LogicalDisk"
Nu am văzut această sintaxă pentru o vreme, cu oameni care preferă să folosească noua sintaxă parametrizată.
Get-WmiObject -Class Win32_LogicalDisk
Dacă doriți să obțineți informațiile de pe alt computer din rețea, puteți pur și simplu să utilizați parametrul ComputerName.
Obțineți-WmiObject -Class Win32_LogicalDisk -ComputerName Viper -Credential viper \ administrator
Utilizând CIM
Ținând cont de faptul că CIM este disponibil numai pe Windows 8 și Server 2012, avansarea în față este cu siguranță o cale de urmat.
Get-CimInstance -ClassName Win32_LogicalDisk
Există, de asemenea, finalizarea tab-ului pentru parametrul -ClassName atunci când se utilizează Get-CimInstance, care arată că înainte de aceasta, eforturile Microsoft vor fi concentrate.
De fapt, WMI a fost dezvoltat de o echipă complet separată de Microsoft, dar ulterior a fost preluată de oamenii responsabili de PowerShell. Ei au fost cei care au observat că va fi foarte greu să curețe mizeria WMI lăsată în urmă. Într-o încercare de a remedia situația, ei încearcă să facă WMI și CIM mult mai accesibile scriind cmdleturi care foloseau WMI și CIM sub capotă. Singura modalitate de a verifica dacă un cmdlet este un wrapper este examinarea documentației. De exemplu, cmdlet-ul Get-Hotfix este un înveliș pentru clasa Win32_QuickFixEngineering, așa cum se vede în documentație.
Asta înseamnă că puteți obține remedierile rapide pe mașinile la distanță folosind cmdlet-ul Get-HotFix în loc de o interogare WMI.
Get-HotFix -ComputerName localhost
Deci, tu o ai. Amintiți-vă că dacă există un cmdlet dedicat, veți dori întotdeauna să îl utilizați, urmat de CIM dacă un cmdlet nu există. În cele din urmă, dacă toate celelalte nu reușesc sau dacă aveți mașini mai vechi în mediul dvs., veți dori să utilizați WMI. Asta e tot ce am pentru acest moment. Ne vedem mâine pentru mai multă distracție PowerShell.