potęgą PowerShell jest jego obiektowość, dzięki czemu cały język jest bardzo elastyczny. np filtrowanie wyjścia staje się bardzo proste:

proste, jasne i przyjemne… i łatwo znaleźć na setkach tysiącach stron…

dla tego inne pytanie – a jak przefiltrować po wartościach wszystkich parametrów? np. „pokaż wszystkie parametry obiektu, które mają ‚name’ w nazwie”, albo „pokaż wszystkie wartości parametrów, które zawierają ‚abc'”. tego już tak łatwo zrobić się nie da. to będzie nieco nieprzyjemna przejażdżka, bo wymaga rozebrania obiektu na kawałki – czyli tracimy automatykę PS, która tak ślicznie pomaga w ‚normalnych’ zapytaniach, i grzebiemy we flakach.

aby osiągnąć cel trzeba skorzystać z ukrytego parametru ‚psobject’, który pokazuje wnętrzności obiektu. dodatkowo sprawę kompliqje fakt, że wyjście jest często tablicą obiektów a nie pojedynczym obiektem. pobawmy się ‚get-service’ i zrealizujmy takie zadania:

  • wyświetlmy wszystkie nazwy i wartości parametrów, które mają w nazwie ‚name’
  • wyświetlmy wszystkie nazwy i wartości parametrów, dla których wartość jest równa ‚true’

w pierwszej kolejności zobaczmy jak taki obiekt wygląda wewnątrz. najpierw klasycznie…:

a potem… od środka:

nas będą interesować ‚properties’, których nazwy zawierają ‚name’. nie będę się bawił w step-by-step, myślę, że taki początek wystarczy, a całą resztę trzeba po prostu usiąść i się pobawić. mamy podstawy więc teraz trzeba po PowerShellowemu zapisać zadanie „wyświetl wszystkie usługi (obiekty), następnie dla każdej usługi przefiltruj te parametry, który mają w nazwie ‚name’ a następnie wyświetl tylko nazwę i wartość”. po takim zapisie to już bułka z masłem:

a teraz drugie zadanie – i tu robi się na prawdę pasqdnie, bo wartości mogą być różnych typów i też są obiektami. ponadto samo ‚property, value’ będzie bezużyteczne bez dodatkowej informacji – nazwy usługi dla której je znaleźliśmy. poniżej rozwiązanie, zachęcam do zrozumienia – czyli samodzielnych testów:

żeby nie było za łatwo… i tego nie potrafię wyjaśnić – z jakiegoś powodu ‚Stopped’ jest traktowany jako $true. fragment wyjścia:

… ale już nie chce mi się zagłębiać dalej.

sztuka dla sztuki? niekoniecznie. często trafiam na scenariusz, prostszy niż zaprezentowane, gdzie dostaję obiekt o dużej liczbie parametrów – np. obiekty EXO – i chcę sprawdzić czy gdzieś nie siedzi jakaś wartość, przy czym nie mam pojęcia jak może nazywać się parametr. o ile w ogóle istnienie. np. wyświetlmy wszystkie URI jakie są skonfigurowane dla grupy o365:

to tak w ramach przygotowań do ShareCon365 (; zapraszam na moją sesję!

PS. aahhh… jeśli ktoś czytał z uwagą, to powinien zadać pytanie – „a jakie jeszcze ukryte parametry mają obiekty?„. i jeśli ktoś takie pytanie by zadał, otrzymałby zapewne odpowiedź: „<your-command>|gm -force

eN.