Zrovna jsem v rámci jednoho projektíku dokončil PowerShell funkci na vyhledání všech členů nějaké doménové skupiny. Už se na to chystám dlouho, tak se mi teď hodilo, že mě to donutilo to dokončit. Možná se to může zdát jednoduché, projet rekurzivně member atribut, ale ve skutečnosti není.
Musíte počítat s tím, že členem skupiny může být jiná skupina (group) z jiné domény, může to být počítač (computer) nejen uživatel (user), může to být taky servisní účet (msDS-ManagedServiceAccount, nebo msDS-GroupManagedServiceAccount). Skupiny mohou být navíc distribuční (distribution), nebo i aplikační, což nechcete dále procházet více do hloubky (i když i tyto skupiny mají SID) ani přidávat do výsledku. Existují i speciální typy objektů, jako je trust (ve skutečnosti je to normální účet typu user), nebo inetOrgPerson, což je to stejné jako uživatel.
Nesmíte zapomenout, že můžete mít více domén ve forestu a stejně tak můžete mít i trusty (externí a forestové) a tím pádem musíte řešit foreign security principal (foreignSecurityPrincipal), u kterého nejsou skoro žádné informace kromě SIDu, takže nevíte, jestli je to další skupina, nebo jen uživatel z jiného forestu.
Je to balík kódu, takže je potřeba stáhnout část mojí ADLAB knihovničky (pouhých 5100 řádečků :-)). Ne že by to bylo všechno potřeba, ale mám to prostě jako jednu z funkcí ve své větší knihovně. Nemusíte se bát, soubor lib-common.ps1 neobsahuje žádné zapisující, nebo měnící, ani destrukční funkce. Schválně. Ty mám v jiném souboru, který ke čtení informací z AD vůbec nepotřebujete.
Takže stáhnout lib-common.ps1, nebo lib-common.ps1.txt pokud vám nejde stáhnout rovnou PS1. Potom už stačí jen to vyzkoušet například takto:
.\lib-common.ps1 noConfig
Get-GroupMembershipt 'cn=Zamestnanci,OU=Skupiny,DC=gopas,DC=virtual'
nebo
.\lib-common.ps1 noConfig
Get-GroupMembershipt 'cn=Zamestnanci,OU=Skupiny,DC=gopas,DC=virtual' | ft *
Musíte tam jenom nahradit distinguishedName té skupiny. A nezapomeňte nahrávat tu knihovnu s parametrem noConfig, ať to nevytváří zbytečně log soubor (byl by v tempu). Jo a musíte to pustit pod účtem, který může všude číst, jinak to neprohledá komplet do hloubky.
Pokud to někdo vyzkoušíte, budu jen rád za každou odezvu :-) ano, je to pomalé, ale je to přece skript. Pokud by byly nějaké problémy, poznáte to ve výpisu v barvě červené nebo modré. Ostatní výpis je jen ladící.