Geek School använder PowerShell för att få datorinformation
WMI och dess nyare bror CIM kan båda användas för att hantera Windows-maskinerna i din miljö. Men vet du skillnaden mellan dem? Följ med oss när vi tittar.
Var noga med att läsa de föregående artiklarna i serien:
- Lär dig hur du automatiserar Windows med PowerShell
- Att lära sig använda Cmdlets i PowerShell
- Lär dig hur man använder objekt i PowerShell
- Learning Formatering, filtrering och jämförelse i PowerShell
- Lär dig använda Remoting i PowerShell
Och håll dig uppdaterad för resten av serien hela veckan.
Introduktion
WMI står för Windows Management Instrumentation. Ordet "Instrumentation" refererar till det faktum att WMI ger dig möjlighet att få information om datorns interna tillstånd, precis som instrumentbrädans instrument i din bil kan hämta och visa information om tillståndet för dina bilar, interna komponenter.
WMI består av ett förråd som innehåller klasser som representerar komponenter som kan hanteras inom din maskin. Med det menar vi bara för att WMI har en Win32_Battery-klass betyder inte att din maskin innehåller ett batteri. Dessa klasser kan sedan ställas in för information lokalt eller till och med över ett nätverk med ett fråge språk som mycket liknar SQL som kallas WQL. WMI har dock varit känt att vara mycket opålitligt, främst på grund av att det är baserat på RPC (Remote Procedure Calls), som gör några galna saker med de hamnar de väljer att kommunicera på.
Från och med Windows 8 och Server 2012 fasas WMI ut till förmån för den gemensamma informationsmodellen eller CIM för korta. Den enda skillnaden mellan WMI och CIM är de transportprotokoll som de använder. Medan WMI utför frågor med fjärrproceduranrop använder CIM HTTP, vilket tycks göra en stor skillnad. På baksidan pratar de fortfarande med samma förvaringsplats.
Använda WMI
Det snabbaste och enklaste sättet att undersöka den information som finns tillgänglig via WMI är att fånga en kopia av alla gratis WMI-objektbläddrare. Vi gillar den här. När du har laddat ner, skjut det upp och du kommer att ha ett grafiskt gränssnitt för att bläddra i WMI-klasserna.
Om du vill ta reda på något om en dators diskkonfiguration, tryck på Ctrl + F-tangentbordskombinationen för att få fram en sökruta och skriv sedan "logicaldisk" och tryck på enter.
Omedelbart tar det dig till klassen Win32_LogicalDisk.
På den nedre halvan av ansökan kan du se att vi har två instanser av klassen.
När vi har den klass vi letar efter, frågar den från PowerShell är rakt framåt.
Get-WmiObject -Query "VÄLJ * FRÅN Win32_LogicalDisk"
Jag har inte sett den syntaxen för en stund med människor i dessa dagar föredrar att använda den nya parametrerade syntaxen.
Get-WmiObject-klass Win32_LogicalDisk
Om du vill få informationen från en annan dator i ditt nätverk kan du helt enkelt använda parametern ComputerName.
Get-WmiObject-klass Win32_LogicalDisk -ComputerName Viper -Credential viper \ administratör
Använda CIM
Tänk på att CIM endast är tillgängligt på Windows 8 och Server 2012, framåt är det definitivt vägen att gå.
Get-CimInstance -ClassName Win32_LogicalDisk
Det finns också flikavslutning för parametern -ClassName när du använder Get-CimInstance, vilket visar att framsteg här är där Microsofts ansträngningar kommer att fokuseras.
Faktum är att WMI har utvecklats av ett helt separat team inom Microsoft, men har därefter tagits över av de ansvariga för PowerShell. De var de som märkte att det kommer att bli väldigt svårt att städa upp roten WMI kvar. I ett försök att avhjälpa situationen försöker de göra WMI och CIM mer tillgängliga genom att skriva wrapper cmdlets som använder WMI och CIM under huven. Det enda sättet att kontrollera om en cmdlet är en omslag är genom att titta på dokumentationen. Exempelvis är cmdlet Get-Hotfix en omslag för Win32_QuickFixEngineering-klassen, vilket framgår av dokumentationen.
Det betyder att du kan få snabbkorrigeringarna på fjärrmaskiner med hjälp av Get-HotFix cmdlet istället för en WMI-fråga.
Get-HotFix-ComputerName localhost
Så där har du det. Kom bara ihåg att om det finns en dedikerad cmdlet, vill du alltid använda den, följt av CIM, om en cmdlet inte existerar. Slutligen, om allt annat misslyckas, eller om du har äldre maskiner i din miljö, vill du använda WMI. Det är allt jag har för den här gången. Vi ses imorgon för mer PowerShell-kul.