Mieliśmy ostatnio problem z polskimi znakami w displayname - dostaliśmy listę kont do załozenia która była w innym kodowaniu niz zazwyczaj, i automat załozył konta z polskimi znakami w displayName. Niestety Linuxy przy zakladaniu aliasów pocztowych nie poradziły sobie z polskimi znakami, więc mieliśmy ok 100 kont do dodania.
Kfaz po długiej i cięzkiej nauce powershella napisał taki skrypt:
$Root = New-Object DirectoryServices.DirectoryEntry $strROOT
$logname = "Nazwiska";
$logname += get-date -format "yyyyMMdd_hhmmss";
$logname +=".log";
$Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=User)(!(objectClass=Computer)))";
$users = $searcher.findAll();
$l=0;
$log=@();
$polish = "ą","ć","ę","ł","ń","ó","ś","ź","ż","Ą","Ć","Ę","Ł","Ń","Ó","Ś","Ź","Ż";
$latin = "a","c","e","l","n","o","s","z","z","A","C","E","L","N","O","S","Z","Z"
foreach ($user in $users)
{
write-host "." -NoNewLine;
if (([string] $user.properties.displayname) -match "[ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]")
{
$de = New-Object DirectoryServices.DirectoryEntry $user.Path;
$temp = $de.displayName;
for ($i = 0; $i –lt $polish.count; $i++)
{
$temp = ([String]$temp).Replace($polish[$i], $latin[$i]);
}
$log+=$de.SAMAccountName +" "+$de.displayName+" "+$temp;
$de.SAMAccountName;
$de.displayName;
$temp;
echo "-------------------------------------";
$de.displayName = $temp;
$de.CommitChanges();
$l++;
}
}
echo "Przetworzonych " $l | out-file $logname -Append
$log | out-file $logname -Append
echo "Przetworzonych " $l