Hjemmeside » hvordan » Geek School Bruke PowerShell å få informasjon om datamaskinen

    Geek School Bruke PowerShell å få informasjon om datamaskinen

    WMI og den nyere broren CIM kan begge brukes til å administrere Windows-maskiner i ditt miljø. Men vet du forskjellen mellom dem? Bli med oss ​​når vi tar en titt.

    Husk å lese de forrige artiklene i serien:

    • Lær hvordan du automatiserer Windows med PowerShell
    • Lære å bruke Cmdlets i PowerShell
    • Lære hvordan du bruker objekter i PowerShell
    • Læreformatering, filtrering og sammenligning i PowerShell
    • Lær å bruke Remoting i PowerShell

    Og hold deg innstilt for resten av serien hele uken.

    Introduksjon

    WMI står for Windows Management Instrumentation. Ordet "Instrumentasjon" refererer til det faktum at WMI lar deg få informasjon om datamaskinens interne tilstand, akkurat som instrumentbrettinstrumenter i bilen din kan hente og vise informasjon om tilstanden til bilens interne komponenter.

    WMI består av et lager som inneholder klasser som representerer komponenter som kan administreres i maskinen. Dermed mener vi bare fordi WMI har en Win32_Battery-klasse, betyr ikke at maskinen inneholder et batteri. Disse klassene kan deretter bli forespurt for informasjon lokalt eller til og med på tvers av et nettverk ved hjelp av et spørrespråk som ligner SQL som kalles WQL. Imidlertid har WMI vært kjent for å være svært upålitelig, hovedsakelig på grunn av det faktum at den er basert på RPC (Remote Procedure Calls), som gjør noen galne ting med portene de velger å kommunisere på.

    Fra og med Windows 8 og Server 2012 blir WMI faset ut til fordel for den vanlige informasjonsmodellen eller CIM for kort. Den eneste forskjellen mellom WMI og CIM er transportprotokollene de bruker. Mens WMI utfører spørringer ved hjelp av Remote Procedure Calls, bruker CIM HTTP, som ser ut som en stor forskjell. På baksiden snakker de fremdeles med det samme oppbevaringsstedet.

    Bruke WMI

    Den raskeste og enkleste måten å utforske informasjonen tilgjengelig på deg via WMI, er å ta tak i en kopi av en hvilken som helst gratis WMI Object Browser. Vi liker denne. Når du har lastet ned, brann det opp, og du vil ha et grafisk grensesnitt for å bla gjennom WMI-klassene.

    Hvis du vil finne ut noe om en datamaskinens diskkonfigurasjon, trykker du på Ctrl + F-tastaturkombinasjonen for å hente en søkeboks, skriv deretter "logisk disk" og trykk enter.

    Umiddelbart vil dette ta deg til klassen Win32_LogicalDisk.

    På den nederste halvdelen av søknaden kan du se at vi har to forekomster av klassen.

    Når vi har den klassen vi leter etter, spør det fra PowerShell er rett fram.

    Get-WmiObject -Query "VELG * FRA Win32_LogicalDisk"

    Jeg har ikke sett denne syntaksen en stund med folk i disse dager, og foretrekker å bruke den nye parameteriserte syntaksen.

    Get-WmiObject -Class Win32_LogicalDisk

    Hvis du vil få informasjonen fra en annen datamaskin på nettverket ditt, kan du bare bruke parameteren ComputerName.

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

    Bruke CIM

    Husk at CIM bare er tilgjengelig på Windows 8 og Server 2012, fremover er dette definitivt veien å gå.

    Get-CimInstance -ClassName Win32_LogicalDisk

    Det er også tabulasjon for parameteren -ClassName når du bruker Get-CimInstance, noe som viser at det går framover at Microsoft vil arbeide.

    Faktisk ble WMI utviklet av et helt eget team i Microsoft, men har senere blitt overtatt av de ansvarlige for PowerShell. De var de som la merke til at det kommer til å være veldig vanskelig å rydde opp rotet WMI igjen. I et forsøk på å rette opp situasjonen, prøver de å gjøre WMI og CIM mer tilgjengelig ved å skrive wrapper cmdlets som bruker WMI og CIM under hetten. Den eneste måten å sjekke om en cmdlet er en innpakning, er å se på dokumentasjonen. For eksempel er Get-Hotfix cmdlet et omslag for Win32_QuickFixEngineering-klassen, som vist i dokumentasjonen.

    Det betyr at du kan få hurtigreparasjonene på eksterne maskiner ved hjelp av Get-HotFix cmdlet i stedet for en WMI-spørring.

    Get-HotFix -ComputerName localhost

    Så der har du det. Bare husk at hvis det er en dedikert cmdlet vil du alltid bruke den, etterfulgt av CIM, hvis en cmdlet ikke eksisterer. Til slutt, hvis alt annet feiler, eller hvis du har eldre maskiner i ditt miljø, vil du ønske å bruke WMI. Det er alt jeg har for denne gangen. Ser deg i morgen for mer PowerShell-moro.