zadanie: trzeba zmienić grupy globalne na uniwersalne. zadanie o tyle nietrywialne, że grupa uniwersalna, nie może być członkiem grupy globalnej. a więc nie da się po prostu zaznaczyć wielu grup [czy też przelecieć skryptem] i zmienić ich w uniwersalne, bo posypią się błędy właśnie z takim opisem. trzeba najpierw znaleźć zagnieżdżenia i zmieniać typ 'od dołu’.[swoją drogą, to wymuszenie w Exchange 2o1o+ z grupami uniwersalnymi jest pasqdny – właśnie z powodu tego, jak trzeba się napocić z konwersją i konsekwencjami w produkcji…]
klient ma bardzo złożoną strukturę grup więc żeby sobie trochę pomóc na szybko napisałem skrypt, który rekursywnie listuje memberof… i zatrzymałem się nad głupim problemem – jak ładnie wyświetlić poziomy zagnieżdżenia? trzeba na początq wstawić jakieś spacje. szybko znalazłem funkcję 'padleft’ tylko… że nie chciała działać. krótki test typu:
echo "aaa".padlef(10)
wszystko działa. tymczasem w mojej funkcji nie chce… o co c’mon? chwilę mi zajęło zanim zwróciłem uwagę na drobny szczegół – liczba, jaką się podaje, to nie długość akapitu a długość finalnego ciągu, który chcemy uzyskać. w sumie to faktycznie – tak właśnie ma działać funkcja 'pad’! nie 'przesuwać o’ a ’przesuwać do’.
finalnie skrypt wygląda tak:
function groupDeps {
################################################################
#.Synopsis
# shows group memebership with nesting to find all dependencies
# helpfull i.e. before changing from Global to Universal
#.Parameter Identity
# function is using ActiveDirectory module's get-AdGroup. Identity
# may be group Identity name od DN.
################################################################
param(
[Parameter(Mandatory=$true)][string]$Identity,
[int]$level=1
)
import-module ActiveDirectory
$grp=get-AdGroup -Identity $Identity -properties memberof
$mofnr=$grp.memberof.count
#echo "group is a member of $mofnr groups"
if($mofnr -ne 0) {
if($?) {
$str="$($grp.name) is member of:"
echo $str.padLeft($str.length+(($level-1)*4))
$grp.memberof|%{
$str="-> $_" ;
echo $str.padLeft($str.length+($level*4))
groupDeps $_ ($level+1)
}
} else {
echo $error
}
}
}
i jak zwykle najwięcej czasu poszło na pierdoły q:
eN.


MAciejM