Oneliner wyświetlający administratorów AAD/o365
trochę zabawa żeby udowodnić co może PS, bo można łatwiej, ale na pewno w większej ilości kroqw.
scenariusz: wyświetlić wszystkich adminów i ich role w AAD. niby proste, mamy do dyspozycji get-AzureADDirectoryRole i get-AzureADDirectoryRoleMember. a więc we w miarę prostej postaci można to zrobić tak:
Get-AzureADDirectoryRole|%{$rn=$_.displayname;Get-AzureADDirectoryRoleMember -ObjectId $_.objectid|? objectType -eq 'user'|select displayname,userprincipalname,@{N='role';E={$rn}}}
już tutaj zapytanie jest dość złożone. z ciekawych elementów, które warto wyjaśnić:
- $rn=$_.displayname jest ściśle powiązane z faktem, żeby potem wykorzystać je w selekcie. bez tego utracona by została informacja dotycząca roli – a więc byłaby lista użytkowników, bez informacji o tym, o którą rolę chodzi.
- ..i tak w selekcie następuje 'wstrzyknięcie’ tej informacji poprzez @{N=’role’;E={$rn}} – utworzona zostaje dodatkowa kolumna o nazwie 'role’.
niemniej to nie koniec 'zabawy’ bo otrzymamy płaską listę, na której jeden login może występować wiele razy – dla każdej roli w której się pojawia. mamy oczywiście 'group-object’ które pozwoli połączyć to w jedną całość… tylko co ukaże się naszym oczom nie będzie przyjemne.
problem, który się pojawia – jak sformatować to, co wypluwa 'group-object’? w dużym skrócie – należy się przyjrzeć temu, co ten zwraca, i potraktować go… jak każdy inny obiekt. przyjmując, że wyniki poprzedniego polecenia mam w zmiennej '$admins’, przyjrzyjmy się co będzie po zgrupowaniu:
$admins|group userprincipalname|select -ExpandProperty group -first 1 DisplayName UserPrincipalName role ----------- ----------------- ---- Administrator nexor@w-files.pl Power BI Service Administrator Administrator nexor@w-files.pl Service Support Administrator Administrator nexor@w-files.pl Exchange Service Administrator Administrator nexor@w-files.pl SharePoint Service Administrator
a więc 'grupa’, trzyma dla każdego wpisu, wszystkie informacje o zgrupowanych obiektach (jako kolekcja obiektów) – ze względu na to zagnieżdżenie, nie jest to zbyt proste do pracy. do tego trzeba będzie pracować na kolekcji – bo jeśli ktoś występuje w kilq rolach, to mamy liczbę mnogą. finalnie odpowiedź jest taka:
Get-AzureADDirectoryRole|%{$rn=$_.displayname;Get-AzureADDirectoryRoleMember -ObjectId $_.objectid|? objectType -eq 'user'|select displayname,userprincipalname,@{N='role';E={$rn}}}|Group-Object userprincipalname |select name,@{N='displayname';E={$_.group.displayname|select -unique}},@{N='roles';E={($_.group.role|sort) -join ','}}
można teraz całość wypluć do CSV [ |export-csv c:\temp\admins.csv -nti -deli ’;’ ] i zrobić raport w Excelu (:
eN.
konwersja XLSX do CSV metodą przeciągnij i upuść
drag’n’drop wygląda jakoś bardziej naturalnie… ale co tam. niech będzie po polsq (;
taka sytuacja…
spora część mojej pracy to zbieranie i analiza danych z systemów – AD, AAD, Ex, EXO, SfB i tak dalej. piszę sobie do tego pałerszelki i wrzucam to do CSV. no niestety – ale cały czas nie mogę się przestawić na jakąś sensowną bazę danych, ale to nie na dziś. potem takie CSVki łatwo jest otworzyć, edytować, analizować w Excel – oczywiście już jako xlsx. wszyscy Excel znają (LoL, raczej potrafią go otworzyć i coś wpisać, bo niestety poziom obsługi podstawowych narzędzi jest niestety, na równie podstawowym poziomie), dzięki o365 mamy wspaniałe funkcje koedycji – a więc w prosty sposób cały zespół może pracować na pojedynczym źródle.
żeby odświeżyć dane w excel, znów muszę wyeksportować go do CSV. czyli:
nie lubię klikać, a więc fajnie byłoby mieć ikonkę na pulpicie, przeciągam plik XLS i voila! CSVka sobie czeka w ustalonym miejscu.
taki przydługi wstęp, ale taki dzień. jak to zrobić?
automatyczna konwersja XLSX2CSV via drag’n’drop
convert-XLSX2CSV.ps1
nic skomplikowanego. jeśli ma być auto trzeba pamiętać, że ścieżki muszą być zahardcodowane, a parametry wejścia najlepiej ograniczyć do nazwy pliq.
2. zrobić skrót na pulpicie, który przyjmie plik drag’n’drop. jeśli zrobimy skrót do ps1 – nie zadziała. skrót musi być do pliq exe. a więc proste:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -file C:\_scriptZ\convert-xlsx2csv.ps1
…no i w zasadzie tyle. teraz wystarczy upuścić plik Excel na skrócie i życie jest dłuższe o kilka ładnych kliqw (=
bezpośrednia edycja XLSX
a nie można by tak bezpośrednio na excelu pracować? ano możnaby. nawet na serwerze. jest taka fajna biblioteka, która pozwala zaimportować się bez instalacji samego excel. nawet kiedyś o tym pisałem. ale obsługa tego skryptem, jest mówiąc oględnie – mało przyjemna. praca na zwykłych obiektach to czysta przyjemność.
eN.