niedziela, 30 października 2022

PowerShell: zabawa z właściwościami obiektu

1. Filtrowanie właściwości obiektu wg fragmentu jego nazwy

W przypadku obiektów posiadających wiele właściwości przydaje się możliwość ich przeszukiwania wg fragmentu ich nazwy. Na przykład obiekt ma setki właściwości, ale chcemy wyświetlić wyłącznie te, które zawierają określone słowo.

WAŻNE!
Proszę zwrócić uwagę, że omawiane jest wyszukiwanie po nazwach właściwości, a nie ich wartościach.
Wyszukiwaniu po wartościach poświęcony jest punkt 2 tego wpisu.

Nazwy właściwości wyświetlane są po lewej stronie (na zielono), a ich wartości po prawej
Nazwy właściwości wyświetlane są po lewej (na zielono), a ich wartości po prawej stronie

Może to nie jest zbyt szczęśliwy wybór, ale przypuśćmy, że z komendy Get-Date chcemy wyświetlić wszystkie właściwości, które zawierają w swojej nazwie ciąg day.

Wyglądałoby to jak poniżej:

(Get-Date).PSObject.Properties.Name -like "*day*"

Zaś rezultat wyglądałby jak na poniższym screenie

Filtrowanie właściwości obiektu po nazwie
Filtrowanie właściwości obiektu wg fragmentu nazwy

1.1. Wyświetlanie wyfiltrowanych właściwości z ich właściwościami

Z pewnością wyszukiwanie właściwości po fragmencie ich nazwy jest przydane, ale czasami chcemy też wiedzieć jakie wartości są do nich przypisane.

Do tego przyda się poniższe polecenie

(Get-Date).PSObject.Properties | Where-Object {$_.Name -like "*day*"}
| Select-Object -property Name, Value

(powyższa komenda została przełamana przed znakiem "|" - w realu trzeba ją złączyć.)

Jak widać na poniższym screenie, wyświetlone zostały nie tylko wartości zawierające w sobie ciąg "day", ale także ich nazwy.

Właściwości wyfiltrowane wg nazwy wraz z ich wartościami
Właściwości wyfiltrowane wg nazwy wraz z ich wartościami

2. Filtrowanie właściwości obiektu wg wartości

Tym razem chcemy przeprowadzić filtrowanie nie po nazwach właściwości, ale po ich wartościach, czyli np. chcemy się zorientować w jakich wartościach występuje ciąg cyfr 2022.

Tutaj powinna pomóc nam poniższa komenda:

(get-date).PSObject.Properties.Value -like "*2022*"
Wynik wyszukiwania ciągu "2022" w wartościach właściwości polecenia Get-Date
Filtrowanie właściwości obiektu wg ich wartości

Warto zauważyć, że z pomocą przyszło nam luźne typowanie oraz konwersja typów w PowerShellu, ale (bez zbytniego wnikania) mam nadzieję, że będzie to działało w większości przypadków. A może zawsze?...

2.1. Wyświetlanie wyfiltrowanych właściwości z ich nazwami

No dobrze, ale czasami poza sprawdzeniem czy właściwości mają określone wartości, chcemy też wiedzieć ich nazwy. Innymi słowy - nie tylko chcemy wiedzieć jak wygląda wartość zawierająca w sobie wyszukiwany ciąg "2022", ale też chcemy wiedzieć wartością jakiej właściwości jest (hmm... wyszło masło maślane ?... ;)

Tutaj skorzystamy z poniższego polecenia

(Get-Date).PSObject.Properties | Where-Object {$_.value -like "*2022*"} | Select-Object -property Name, Value
A poniżej screen z wynikiem działania takiej komendy:
Wynik filtrowania właściwości po ich wartości wraz z wyświetleniem ich nazwy
Wynik filtrowania właściwości po ich wartości wraz z wyświetleniem ich nazwy

Porównywanie właściwości obiektów

A na koniec coś co się przydaje w środowisku AD, czyli porównywanie właściwości użytkowników. 
Compare-Object
-ReferenceObject ((Get-ADuser -identity 'user1' -property *).PSObject.Properties.Name)
-DifferenceObject ((Get-ADuser -identity 'user2' -property *).PSObject.Properties.Name)
Powyższa komenda ma być pisana w jednej linii. Tutaj dla czytelności ją połamałem na 3 wiersze.

Ps. Proszę mi wybarczyć, ale screenem ze środowiska produkcyjnego nie będę się podpierać, natomiast testówki nie chce mi się stawiać... ;)
Ps.1. Powyższy tekst był pisany dosyć szybko, wiec jeżeli jakaś literówka w tekście się wkradła, to niniejszym bardzo proszę o wybaczenie. Natomiast jeżeli jakaś komenda nie działa, proszę o zostawienie informacji w komentarzu i postaram się odpowiednio zareagować.

Brak komentarzy:

Prześlij komentarz

Bardzo proszę o zachowanie netykiety.