Skip to content

Geek School: Używanie PowerShell do uzyskiwania informacji o komputerze

7 de lipiec de 2021
sshot5150b3c58b51f 1024x412 1

Zarówno WMI, jak i jego nowszy brat CIM mogą być używane do zarządzania komputerami z systemem Windows w Twoim środowisku. Ale czy znasz różnicę między nimi? Dołącz do nas, gdy spojrzymy.

Koniecznie przeczytaj poprzednie artykuły z serii:

  • Dowiedz się, jak zautomatyzować system Windows za pomocą PowerShell
  • Nauka korzystania z poleceń cmdlet w PowerShell
  • Nauka korzystania z obiektów w PowerShell
  • Nauka formatowania, filtrowania i porównywania w PowerShell
  • Naucz się korzystać z usług zdalnych w PowerShell

I czekaj na resztę serialu przez cały tydzień.

Wprowadzenie

WMI oznacza Windows Management Instrumentation. Słowo „oprzyrządowanie” odnosi się do faktu, że WMI umożliwia uzyskanie informacji o wewnętrznym stanie komputera, podobnie jak instrumenty deski rozdzielczej w samochodzie mogą pobierać i wyświetlać informacje o stanie wewnętrznych komponentów samochodu.

WMI składa się z repozytorium zawierającego klasy reprezentujące komponenty, którymi można zarządzać na komputerze. Rozumiemy przez to, że tylko dlatego, że WMI ma klasę Win32_Battery, nie oznacza to, że twój komputer zawiera baterię. Klasy te mogą być następnie odpytywane w celu uzyskania informacji lokalnie lub nawet przez sieć przy użyciu języka zapytań bardzo podobnego do języka SQL zwanego WQL. Wiadomo jednak, że WMI jest bardzo zawodny, głównie ze względu na fakt, że jest oparty na RPC (Remote Procedure Calls), które robią szalone rzeczy z portami, z którymi się komunikują.


Począwszy od Windows 8 i Server 2012, usługa WMI jest wycofywana na rzecz modelu Common Information Model lub w skrócie CIM. Jedyną różnicą między usługami WMI i CIM są używane przez nie protokoły transportowe. Podczas gdy usługa WMI wykonuje zapytania przy użyciu zdalnych wywołań procedur, CIM używa protokołu HTTP, co wydaje się mieć ogromne znaczenie. Na backendzie nadal rozmawiają z tym samym repozytorium informacji.

Korzystanie z WMI

Najszybszym i najłatwiejszym sposobem przeglądania informacji dostępnych za pośrednictwem WMI jest pobranie kopii dowolnej bezpłatnej przeglądarki obiektów WMI. Podoba nam się ten. Po pobraniu uruchom go, a będziesz mieć graficzny interfejs do przeglądania klas WMI.

1625639540 614 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Jeśli chcesz dowiedzieć się czegoś o konfiguracji dysku komputera, naciśnij kombinację klawiszy Ctrl + F, aby wyświetlić pole wyszukiwania, a następnie wpisz „logicaldisk” i naciśnij enter.

1625639540 745 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Natychmiast przeniesie Cię to do klasy Win32_LogicalDisk.

1625639540 432 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

W dolnej połowie aplikacji widać, że mamy dwie instancje klasy.

1625639540 405 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Gdy mamy klasę, której szukamy, zapytanie o nią z PowerShell jest proste.

Get-WmiObject -Query „SELECT * FROM Win32_LogicalDisk”

1625639541 388 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Od jakiegoś czasu nie widziałem tej składni, a ludzie w dzisiejszych czasach wolą używać nowej sparametryzowanej składni.

Get-WmiObject – Klasa Win32_LogicalDisk

1625639541 846 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze


Jeśli chcesz uzyskać informacje z innego komputera w sieci, możesz po prostu użyć parametru ComputerName.

Get-WmiObject -Class Win32_LogicalDisk -ComputerName Viper –Credential viperadministrator

1625639541 908 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Korzystanie z CIM

Pamiętając, że CIM jest dostępny tylko w systemach Windows 8 i Server 2012, posuwanie się naprzód jest zdecydowanie właściwą drogą.

Get-CimInstance – nazwa klasy Win32_LogicalDisk

1625639541 864 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Istnieje również uzupełnianie tabulatora dla parametru –ClassName podczas korzystania z Get-CimInstance, co pokazuje, że w przyszłości na tym skupią się wysiłki Microsoftu.

W rzeczywistości WMI został opracowany przez całkowicie oddzielny zespół w firmie Microsoft, ale później został przejęty przez osoby odpowiedzialne za PowerShell. To oni zauważyli, że bardzo trudno będzie posprzątać pozostawiony przez WMI bałagan. Próbując zaradzić tej sytuacji, starają się zwiększyć dostępność WMI i CIM, pisząc opakowujące polecenia cmdlet, które używają WMI i CIM pod maską. Jedynym sposobem sprawdzenia, czy cmdlet jest opakowaniem, jest zapoznanie się z dokumentacją. Na przykład cmdlet Get-Hotfix jest opakowaniem dla klasy Win32_QuickFixEngineering, jak widać w dokumentacji.

1625639541 111 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Oznacza to, że można uzyskać poprawki na komputerach zdalnych za pomocą polecenia cmdlet Get-HotFix zamiast zapytania WMI.

Get-HotFix – nazwa komputera localhost

1625639541 932 Geek School Uzywanie PowerShell do uzyskiwania informacji o komputerze

Więc masz to. Pamiętaj tylko, że jeśli istnieje dedykowany cmdlet, zawsze będziesz chciał go używać, a następnie CIM, jeśli cmdlet nie istnieje. Wreszcie, jeśli wszystko inne zawiedzie lub masz starsze maszyny w swoim środowisku, będziesz chciał użyć WMI. To wszystko, co mam na ten czas. Do zobaczenia jutro, aby uzyskać więcej zabawy w PowerShell.

Czy ten post był pomocny?