Changing Roaming Profiles Server in AD

posted by alex on 27.02.2011 | (0) Comments | Tags: Server, Microsoft

Für alle die Roaming Profiles benutzen und noch keinen DFS Namespace verwenden habe ich hier ein kurzes PowerShell Script geschrieben mit dem es einfacher möglich ist auf einen neuen Server um zuziehen. Das Script ändert bei allen aktivierten Usern im Active Directory, die sich in der angegebenen Organisation Unit befinden (Untergruppen werden auch geändert), den Profile und Home Direcotry Path.

Wichtig: Es werden nur Änderungen im Active Directory vorgenommen. Die Daten müssen selbst mittels Robocopy von ServerA nach ServerB kopiert werden.

Kopiert folgenden Inhalt in die PowerShell ISE. Anschließend muss man die Werte unter "Variablen hier ändern start" anpassen.


cls
$ADSuche=New-Object System.DirectoryServices.DirectorySearcher
$Changed=0
<#----------------------- Variablen hier ändern start -----------------------#>
$ADSuche.SearchRoot="LDAP://OU=Test,OU=User,DC=ranetworks,DC=local"
$oldprof="\\dc1\profiles$"
$olddata="\\dc1\userdata$"
$newprof="\\fileserver1\profiles$"
$newdata="\\fileserver1\userdata$"
<#-----------------------  Variablen hier ändern end  -----------------------#>    
$ADSuche.SearchScope="Subtree"
$ADSuche.Filter="(&(objectClass=user))"
$ADSuche.PageSize=4000
$Ergebnis=$ADSuche.FindAll()

Write-Host "--------------------------------------------------------"
foreach($Obj in $Ergebnis)
{
    $ADObj=[ADSI] $Obj.Path
    $user=$ADObj.sAMAccountName
    $Locked=$ADObj.userAccountControl
    $OU=$ADObj.distinguishedName.ToString().Split(",")[1].Replace("OU=", "     | OU=")
    $homeDir=$ADObj.homeDirectory
    $profDir=$ADObj.profilePath

    if($profDir -eq "$oldprof\$user" -and $homeDir -eq "$olddata\$user" -and $Locked -eq "66048") {
            $Changed = $Changed + 1       
            
            $ADObj.Put("ProfilePath", "$newprof\$user")
            $ADObj.Put("homeDirectory", "$newdata\$user")
            $ADObj.SetInfo()
            
            Write-Host "Changed:" $user $OU
    } else {
        Write-Host "not Changed:" $user $OU -BackgroundColor "red" -ForegroundColor "black"
    } 
}
$notChanged = $Ergebnis.Count - $Changed
Write-Host "--------------------------------------------------------"
Write-Host "Changed:" $Changed "| Not Changed:" $notChanged "| All:" $Ergebnis.Count

Hinweis: Wer auch die deaktivierten User ändern möchte muss einfach die Zeichenfolge " -and $Locked -eq "66048" " entfernen.

Ich empfehle das Script vorher in einer Testumgebung zu testen.


Comments


New Comment