Geek School bruger PowerShell til at få computeroplysninger
WMI og den nyere broder 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 at automatisere Windows med PowerShell
- Lære at bruge Cmdlets i PowerShell
- Lære at bruge objekter i PowerShell
- Learning Formatering, filtrering og sammenligning i PowerShell
- Lær at bruge fjernelse i PowerShell
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 den interne tilstand på din computer, 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 administreres 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 derefter 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 tilgængelige oplysninger på via WMI er at få fat i en kopi af enhver gratis WMI-objektbrowser. Vi kan lide denne. Når du har downloadet det, skal du slukke det, og du vil have en grafisk grænseflade til at gennemse WMI-klasserne.
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.
Umiddelbart vil dette tage dig til klassen Win32_LogicalDisk.
I den nederste halvdel af ansøgningen kan du se, at vi har to tilfælde af klassen.
Når vi har den klasse, vi leder efter, spørger den fra PowerShell lige frem.
Get-WmiObject -Query "VÆLG * FRA Win32_LogicalDisk"
Jeg har ikke set en syntax i et stykke tid med folk i disse dage at foretrække at bruge den nye parameteriserede syntax.
Get-WmiObject -Class Win32_LogicalDisk
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
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
Der er også fanefuldførelse 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 i 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 indpakning, er ved at se på dokumentationen. For eksempel er Get-Hotfix cmdlet et omslag til Win32_QuickFixEngineering-klassen, som det ses i dokumentationen.
Det betyder at du kan få hurtigreparationerne på eksterne maskiner ved hjælp af Get-HotFix cmdlet i stedet for et WMI-forespørgsel.
Get-HotFix -computernavn localhost
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.