Linuxy potrzebują parametru msSFU30GidNumber żeby widziały grupy z Active Directory. Do tej pory pojedyńcze MsSFUGidy robiliśmy ręcznie z ADSIEdit, jednak kiedy przyszło ponad sto nowych grup to trzeba było to jakoś oskryptować.
Skrypt poniżej:
- znajduje maksymalny MsSFUGid w domenie
- wszystkim grupom, które nie mają msSFUGID przypisuje kolejne numery
Jego wadą jest to, że dodaje Gidy wszystkim grupom ale to można zmienić np. poprzez ustawienie odpowiedniego roota przed drugą pętla.
$Root = New-Object DirectoryServices.DirectoryEntry $strROOT
$Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=Group))";
$numer = 0;
$gid ; $groups = $searcher.findAll();
foreach ($group in $groups)
{
$de = New-Object DirectoryServices.DirectoryEntry $group.Path;
$gid = [int]$de.msSFU30GidNumber.ToString();
# write-host $gid ";" -NoNewLine;
# write-host $de.name;
if ($numer -lt $gid )
{
$numer = $gid;
# $numer;
}
}
$numer++;
foreach ($group in $groups)
{
$de = New-Object DirectoryServices.DirectoryEntry $group.Path;
$gid = [int]$de.msSFU30GidNumber.ToString();
if ($gid -eq 0)
{
$de.msSFU30GidNumber = $numer;
$de.SetInfo();
write-host $numer ";" -NoNewLine;
write-host $de.name;
$numer++;
}
}
Tomek
kfaz
nExoR