PowerShell dla początkujących (część 10): filtrowanie i gdzie-obiekt

o PowerShell ’ u dowiedzieliśmy się już wiele. Ostatnio pracowaliśmy z WMI: PowerShell dla początkujących (część 9): pobierz to wszystko z Windows za pomocą PowerShell i WMI teraz, moim zdaniem, jest to najlepszy czas, aby skupić się na temacie „filtrowanie za pomocą PowerShell”. Ale najpierw spójrzmy na ćwiczenie z ostatniej części.

wszystkie części serii można znaleźć tutaj: PowerShell dla początkujących (Seria)

Recenzja (część 9)

oto zadanie i rozwiązanie z części 9:

pobieranie informacji o dysku twardym. Użyj Get-WmiObject lub Get-CimInstance. Najpierw wyszukaj obiekt WMI i po jego znalezieniu Pokaż nazwę, partycje, Model, oprogramowanie układowe i numer seryjny.

najpierw musimy znaleźć nazwę instancji WMI. Ponieważ zadanie odnosi się do dysku twardego, możemy wyszukać na przykład *disk*.

Get-WmiObject *disk* -List

PNG

Win32_DiskDrive brzmi dobrze. Pamiętaj o dwuetapowej metodzie Z CZĘŚCI 8, aby wydobyć więcej z PowerShella:

Get-CimInstance win32_diskdrive | Get-Member

tam znajdziesz odpowiednie atrybuty. Teraz użyj Select-Object, aby uzyskać je wszystkie.

Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Unbenannt.PNG

przegląd

WMI (Windows Management Instruments) zapewnia dostęp do odczytu i zapisu prawie wszystkich ustawień systemu Windows. Istnieją dwa ważne polecenia: Get-WmiObject I Get-CimInstance.

dlaczego filtrowanie?

filtrowanie to kluczowa technologia w PowerShell. Gdy już wiesz, jak filtrować, uzyskasz więcej z PowerShell.

cóż, moim zadaniem w tej części jest wyjaśnienie, dlaczego filtrowanie jest ważne. Ok powiedzmy, że masz więcej niż jeden dysk twardy. Powyższe wyjście pokazuje wszystkie dyski twarde. Ale chcesz wyświetlić tylko dyski twarde Samsung, na przykład.

PNG

Dlaczego chcesz to zrobić? Może twój szef pyta, ile dysków Samsung jest w użyciu. Na wszystkich komputerach. Pamiętaj, że WMI i PowerShell umożliwiają wykonywanie zdalnych zapytań. Ok wracając do tematu. Chcemy tylko Samsung SSD z 500 GB. Uwaga na parametr filtra!

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

PNG

poniższy tekst jest trochę nietypowy i dla bardziej zaawansowanych kujonów PowerShell, ale dlaczego nie? Poniższe polecenie pobiera wszystkie dyski SSD Samsung ze wszystkich komputerów w domenie, ale nie z serwerów.

Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber

Jeśli Twoi koledzy uważają, że stoisz przed nierozwiązywalnym problemem, po prostu naciśnij przyciski i pokaż im, co potrafisz. 😉

Ok, przejdźmy do przykładów dla początkujących.

filtrowanie obiektów

Czy pamiętasz polecenie Get-ChildItem? Używałem tego polecenia bardzo często w tej serii.

jeśli uruchomisz Get-Help Get-ChildItem, znajdziesz wiele przykładów filtrowania w pomocy.

Get-Help Get-ChildItem -Online

wolę korzystać z pomocy lokalnej.

Get-Help Get-ChildItem -Examples

Unbenannt.PNG

czego się do tej pory nauczyliśmy?

filtrowanie to kluczowa technologia w PowerShell. Gdy zrozumiesz, jak filtrować, uzyskasz więcej z PowerShell.

filtrowanie obiektów Active Directory

Jeśli jesteś informatykiem, prawdopodobnie pracujesz w środowisku Active Directory. Filtrowanie jest kluczową techniką podczas pracy z obiektami Active Directory.

następujące polecenie używa parametru filtr, aby uzyskać wszystkich użytkowników, którzy są wyłączeni:

Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name

Unbenannt.PNG

możesz się zastanawiać skąd znam nazwy atrybutów? Pamiętaj o dwuetapowej metodzie, aby uzyskać więcej z obiektów: 1. użyj Get-Member 2. użyj opcji wybierz obiekt.

PNG

parametr filtra

rozejrzyjmy się. Które polecenia używają parametru filtr? Zauważ, że jestem na kontrolerze domeny.

Get-Command -ParameterName Filter

jak widać parametr filtr jest najczęściej używany w poleceniach Active Directory. I muszę przyznać, że zawsze używałem parametru filter tylko dla Active Directory. Tak to już jest. Skupmy się więc na Active Directory. Powiedzmy, że chcemy, aby wszystkie komputery domeny (System operacyjny serwera i system operacyjny klienta) były posortowane według systemu operacyjnego. W tym celu musimy użyć parametru filter z *.

Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem

PNG

pod względem filtrowania było to proste zadanie.

metoda filtrowania

teraz staramy się uzyskać wszystkie komputery, które mają zainstalowany System Windows 10. W tym celu musimy umieścić parametr filtra w zakrzywionych nawiasach.

Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}

Czas na omówienie szczegółów.

wsporniki

umieszczają filtr w zakrzywionych nawiasach.

PNG

atrybuty

następnie znajdź właściwości (atrybuty) nazwa. Omówiliśmy to już w PowerShell dla początkujących (część 8): The Power of PowerShell-Get in Touch with Objects (Get-Member, Select-Object). Pamiętaj o metodzie dwuetapowej!

Unbenannt.PNG

Get-ADComputer client01 -Properties * | Get-Member

PNG

Uwaga boczna: zwróć uwagę na parametr właściwości. W Active Directory nie wszystkie właściwości są domyślnie wyświetlane.

operatorzy

następnie używają operatora.

Unbenannt.PNG

operatorem może być-like, -as, -equal, -ne i tak dalej … aby uzyskać więcej informacji o parametrach wpisz

help about_operators

spowoduje to otwarcie pliku tekstowego zapisanego na twoim komputerze.

polecenie

jeśli chcemy coś filtrować, potrzebujemy warunku. Warunek ten należy umieścić w cudzysłowie.

Unbenannt.PNG

Recenzja

Jeśli pracujesz z filtrami, zapoznaj się najpierw z sekcją pomocy. Filtry są zwykle umieszczane w nawiasach. Często używany jest również operator.

jeszcze kilka przykładów filtrów … bez gadania …

szukanie użytkowników, którzy mają złą liczbę haseł równą 0. Oto przykład konta Petry:

Unbenannt.PNG

Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name

PNG

wyszukuje użytkowników, którzy mają złą liczbę haseł równą 0 i są włączeni. (Zobaczysz, że Petra nie jest włączona).

Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name

PNG

wyświetla wszystkie komputery z domeną Windows Server, ale tylko te, które działają w systemie Windows Server 2016 i których nazwy zaczynają się od DC.

Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}

PNG

ale czasem trzeba znaleźć inny sposób. Mianowicie, gdy nie jest dostępne filtrowanie. Następnie używamy Where-Object.

filtrowanie za pomocą Where-Object

Where-Object znajduje się zawsze po prawej stronie potoku. Filtrowanie po lewej. Co to oznacza, plusy i minusy na końcu postu. W tej części skupimy się na Where-Object.

oto kilka przykładów z pomocy PowerShell.

Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}

jednak chciałbym użyć przykładu z jednego z moich prac.

Get-Hotfix | Where-Object HotfixID -like KB31*

Unbenannt.PNG

zwróć uwagę na HotFixID. Odnosi się do atrybutu.

zalecana procedura (ze względu na kompatybilność wsteczną) wygląda następująco:

Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}

Unbenannt.PNG

Teraz jest coś nowego. Co oznacza$_?

$_ jest zmienną, która iteruje nad każdym obiektem / elementem przekazanym z poprzedniego (pipe). Mówiąc najprościej: weź poprawkę z każdego obiektu, który pochodzi z rury.

filtrowanie vs.Where-Object

Jeśli filtr nie jest dostępny, użyj Where-Object. Jeśli jesteś w stanie użyć filtra po lewej stronie rury użyj go! Dlaczego? Cóż, jest różnica, czy wyślesz 1000 obiektów przez rurę, czy tylko 500, W przypadku Where-Object wszystkie obiekty muszą przejść przez rurę i dopiero wtedy są filtrowane. Remember the pipe from part 7: PowerShell for Beginners (Part 7): The Pipe (And many examples to play with)

Review

Where-Object is always on the right side of the pipe. Filtrowanie po lewej. Jeśli masz wybór pomiędzy filtrem po lewej stronie rury lub gdzie-obiekt po prawej stronie, a następnie wybierz lewą stronę.

ćwiczenie

oto ćwiczenie do następnej części.

Where-Object:

użyj Get-Service i Where-Object, aby wyświetlić tylko uruchomione usługi.

Filtr (wymagany Active Directory):

użyj parametru filtr, aby uzyskać wszystkich użytkowników, którzy są wyłączeni.

do zobaczenia następnym razem w temacie: PowerShell dla początkujących (część 11): Zabawa z napędami PowerShell

Patrick Gruenauer, MVP PowerShell

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.