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
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
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.
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
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
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
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.
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
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.
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!
Get-ADComputer client01 -Properties * | Get-Member
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.
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.
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:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
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
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*')}
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*
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*'}
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