Včera na Microsoft TechNet Univerzitě v Bratislavě jsem ukazoval malý skriptík na tzv. shadow group, tedy skupinu v Active Directory, která obsahuje všechny členy nějaké organizační jednotky (organizational unit). Prostě skupina jaksi duplikující tu organizační jednotku.
Je to pěkná ukázka, jak se dají dělat cykly v příkazové řádce (CMD) a rovnou si to ukážeme i v PowerShellu, pro porovnání. Jen pro pořádek, v tomto konkrétním případě použití DSQUERY a DSMOD to není přímo potřeba, protože DSMOD umí přijímat pajpovaný vstup. Ale to v případě příkazové řádky není obvyklé, DSMOD apod. jsou v tomhle spíš výjimkou. Takže jde o obecnou ukázku cyklu v příkazové řádce.
Cílem je vzít výstup příkazu DSQUERY a poslat ho na vstup příkazu DSMOD. DSQUERY vyhledává uživatele, nebo i libovolné jiné objekty v Active Directory. Dá se samozřejmě použít libovolně komplikovaný LDAP search string, ale já tu ukazuju v co nejvíce zjednodušeném tvaru. Každý řádek výstupu obsahuje distinguishedName jednoho uživatelského účtu, který je umístěn v nějaké organizační jednotce:
DSQUERY user "OU=Brno,OU=Users,OU=Company,DC=ad,DC=sevecek,DC=com" -limit 0
V předchozím je nutné použít parametr -limit, protože DSQUERY normálně vrací maximálně jen 100 nalezených objektů.
No a já bych rád tento každý řádek výstupu poslal do příkazu DSMOD group -addmbr, který přidá do určité skupiny jednoho uživatele. Musím to tedy volat v cyklu. Formát DSMOD příkazu by byl tento (uvedené distinguishedName ukazuje na skupinu, do které chci přidávat toho uživatele):
DSMOD group "CN=Brno Users,OU=Groups,OU=Company,DC=ad,DC=sevecek,DC=com" -addmbr <uzivatel>
Tak a teď to zkombinujme do cyklu
FOR /F "delims=" %i IN ('DSQUERY user "OU=Brno,OU=Users,OU=Company,DC=ad,DC=sevecek,DC=com" -limit 0') DO (
DSMOD group "CN=Brno Users,OU=Groups,OU=Company,DC=ad,DC=sevecek,DC=com" -addmbr %i
)
Upozorňuju, že jestli z toho chcete udělat .BAT soubor, musíte použít dvojité procento pro proměnnou %i - do .BATu tedy dejte na obě místa %%i.
A teďA teď to stejné v PowerShell
DSQUERY user "OU=Brno,OU=Users,OU=Company,DC=ad,DC=sevecek,DC=com" -limit 0 | % {
DSMOD group "CN=Brno Users,OU=Groups,OU=Company,DC=ad,DC=sevecek,DC=com" -addmbr $_
}
No vidíte, že to není žádná dřina :-)