Po przejrzeniu kilku rekordów userów okazało się, że niektórzy mają w Display Name poustawiane pomiędzy imieniem i nazwiskiem 2 spacje zamiast 1. Aby to skorygować, powstał ten skrypt:
$data=get-date -format g
$comment="[changedDN "+$data+"by PeKi]"
$logname = "changedDN";
$logname += get-date -format "yyyyMMdd_hhmmss";
$logname +=".log";
$l=0
$Root = New-Object DirectoryServices.DirectoryEntry $strROOT
Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=person)(objectcategory=person)(displayName=* *))";
$users = $searcher.findAll();
$log=@();
foreach ($user in $users)
{
$de = New-Object DirectoryServices.DirectoryEntry $user.Path;
$log+=$de.SAMAccountName + " " + $de.displayName
$de.displayName=([String]$de.displayName).Replace(" "," ")
$l++
}
echo "Przetworzonych " $l | out-file $logname -Append
$log| out-file $logname -Append
echo "Przetworzonych " $l
$log
A ten skrypt poprawia błąd, w którym nazwisko jest powtórzone 2 razy:
$data=get-date -format g
$comment="[changedDN "+$data+"by PeKi]"
$logname = "changedDNGN";
$logname += get-date -format "yyyyMMdd_hhmmss";
$logname +=".log";
$Root = New-Object DirectoryServices.DirectoryEntry $strROOT
Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=person)(objectcategory=person)(displayname=* * *)(givenName=* *)(sn=*))";
$users = $searcher.findAll();
$log=@();
$l=0
foreach ($user in $users)
{
$de = New-Object DirectoryServices.DirectoryEntry $user.Path;
$gns=([String]$de.givenName).Split(' ')[1].tolower()
$sn=([String]$de.sn).tolower()
if ($gns.CompareTo($sn) -eq 0)
{
$newGN=([String]$de.givenName).Split(' ')[0];
$newDN=$newGN+" "+([String]$de.sn)
$log+=$de.SAMAccountName+ $de.givenName + $de.displayName + $newGN +$newDN
write-host $l
$de.givenName=$newGN
$de.displayName=$newDN
$l++
}
}
echo "Przetworzonych " $l | out-file $logname -Append
$log| out-file $logname -Append
echo "Przetworzonych " $l
$log