27Aug

Geek School: Brug af PowerShell til at få computeroplysninger

WMI og dens nyere bror CIM kan begge bruges til at styre Windows-maskinerne i dit miljø.Men kender du forskellen mellem dem? Kom med os, når vi kigger.

Sørg for at læse de tidligere artikler i serien:

  • Lær hvordan du automatiserer Windows med PowerShell
  • Lær at bruge Cmdlets i PowerShell
  • Lær at bruge objekter i PowerShell
  • Lær formatering, filtrering og sammenligning i PowerShell
  • Lær at bruge fjernelse iPowerShell

Og hold dig indstillet til resten af ​​serien hele ugen.

Introduktion

WMI står for Windows Management Instrumentation. Ordet "Instrumentation" refererer til det faktum, at WMI giver dig mulighed for at få oplysninger om computerens interne tilstand, ligesom instrumentbrættet i din bil kan hente og vise oplysninger om tilstanden på dine biler interne komponenter.

WMI består af et lager, der indeholder klasser, der repræsenterer komponenter, der kunne styres inden i din maskine. Dermed mener vi bare fordi WMI har en Win32_Battery klasse, betyder det ikke, at din maskine indeholder et batteri. Disse klasser kan så forespørges til information lokalt eller endda på tværs af et netværk ved hjælp af et forespørgselssprog, der ligner meget SQL kaldet WQL.WMI har imidlertid været kendt for at være meget upålitelig, hovedsagelig på grund af, at den er baseret på RPC( Remote Procedure Calls), som gør nogle vanvittige ting med de havne, de vælger at kommunikere på.

Fra og med Windows 8 og Server 2012 bliver WMI udfaset til fordel for den fælles informationsmodel eller CIM for kort. Den eneste forskel mellem WMI og CIM er de transportprotokoller, de bruger. Mens WMI udfører forespørgsler ved hjælp af Remote Procedure Calls, bruger CIM HTTP, hvilket synes at gøre en enorm forskel. På bagsiden taler de stadig med det samme opbevaringssted.

Brug af WMI

Den hurtigste og nemmeste måde at udforske de oplysninger, der er tilgængelige for dig via WMI, er at få fat i en kopi af enhver gratis WMI-objektbrowser. Vi kan lide denne. Når du er downloadet, skal du slukke det, og du vil have en grafisk grænseflade til at gennemse WMI-klasserne.

billede

Hvis du vil finde ud af noget om en computers diskkonfiguration, skal du trykke på Ctrl + F-tastaturkombinationen for at hente et søgefelt og derefter skrive "logicaldisk" og trykke enter.

billede

Umiddelbart vil dette tage dig til klassen Win32_LogicalDisk.

billede

I den nederste halvdel af ansøgningen kan du se, at vi har to tilfælde af klassen.

billede

Når vi har den klasse, vi leder efter, spørger den fra PowerShell lige frem.

Get-WmiObject -Query "VÆLG * FRA Win32_LogicalDisk"

billede

Jeg har ikke set denne syntaks et stykke tid med folk i disse dage at foretrække at bruge den nye parameteriserede syntax.

Get-WmiObject -Class Win32_LogicalDisk

billede

Hvis du vil hente oplysningerne fra en anden computer på dit netværk, kan du simpelthen bruge parameteren ComputerName.

Get-WmiObject -Class Win32_LogicalDisk -ComputerName Viper -Credential viper \ administrator

billede

Brug af CIM

Husk at CIM kun er tilgængelig på Windows 8 og Server 2012, og det er helt sikkert den rigtige vej at gå videre.

Get-CimInstance -ClassName Win32_LogicalDisk

billede

Der er også faneafslutning for parameteren -ClassName, når du bruger Get-CimInstance, hvilket viser at fremadrettet er dette her, hvor Microsofts indsats vil blive fokuseret.

Faktisk blev WMI udviklet af et helt separat team inden for Microsoft, men er efterfølgende blevet overtaget af de ansvarlige for PowerShell. De var dem der bemærkede, at det vil være meget svært at rydde op for rodet WMI efterladt. I et forsøg på at afhjælpe situationen forsøger de at gøre WMI og CIM mere tilgængelige ved at skrive wrapper cmdlets, der bruger WMI og CIM under hooden. Den eneste måde at kontrollere, om en cmdlet er en wrapper, er ved at se på dokumentationen. For eksempel er Get-Hotfix cmdlet et omslag til Win32_QuickFixEngineering-klassen, som det ses i dokumentationen.

billede

Det betyder, at du kan få hurtigreparationerne på eksterne maskiner ved hjælp af Get-HotFix cmdlet i stedet for en WMI-forespørgsel.

Get-HotFix -ComputerName localhost

billede

Så der har du det. Bare husk at hvis der er en dedikeret cmdlet, vil du altid bruge den, fulgt op af CIM, hvis en cmdlet ikke eksisterer. Endelig, hvis alt andet fejler, eller hvis du har ældre maskiner i dit miljø, vil du gerne bruge WMI.Det er alt, hvad jeg har for denne gang. Vi ses i morgen for mere PowerShell sjov.