speedy26gonzales
Goto Top

User und Gruppen von Server 2008 auf Server 2008 R2 umziehen

Hallo,

ich habe die letzte Zeit öfters damit zu tun dass wir ältere Server (z.B. 2003, 2008) auf Server 2008 R2 umstellen.

Da die Server an keiner Domain hängen und auch kein Domaincontroller laufen haben, sind alle User und Gruppen lokal auf dem Server.

Jetzt meine Frage:
Gibt es eine Möglichkeit von einem alten Server die User und Gruppen mit Zuordnungen auszulesen (exportieren) und am neuen Server wieder zu importieren?

Derzeit mache ich das alles von Hand und das ist auf Dauer keine Lösung face-smile.

Content-Key: 272265

Url: https://administrator.de/contentid/272265

Printed on: April 19, 2024 at 13:04 o'clock

Member: emeriks
emeriks May 19, 2015 updated at 06:56:18 (UTC)
Goto Top
Hi,
schau mal hier. Da werden unter "Migrieren lokaler Benutzer und Gruppen" ein paar Powershell Kommandos genannt.

E.
Member: speedy26gonzales
speedy26gonzales May 19, 2015 at 10:32:55 (UTC)
Goto Top
Zitat von @emeriks:

Hi,
schau mal hier. Da werden unter "Migrieren
lokaler Benutzer und Gruppen" ein paar Powershell Kommandos genannt.

E.

Danke für Deine Antwort.

So wie ich das sehe muss ich da erst mal die Migrationstools auf den Servern installieren.
Gibt es rein mit Windowsmöglichkeiten die von Haus aus installiert sind keine Möglichkeit?
Member: emeriks
emeriks May 19, 2015 at 11:45:50 (UTC)
Goto Top
Na doch. Mit VBscript z.B. Aber auch da musst Du erst ein Script schreiben.
Oder Powershell.

E.
Member: colinardo
colinardo May 21, 2015 updated at 08:19:51 (UTC)
Goto Top
Moin zusammen,
das könnte dann mit Powershell in zwei Funktionen aufgeteilt etwa so aussehen:
function Export-LocalGroupMembers([string]$csvfile){
    $groupmembers = @()
    gwmi Win32_GroupUser | %{
        $groupmembers += New-Object PSObject -Property @{
            "Group"=[regex]::match($_.GroupComponent,'Name="(.*)"').Groups[1].Value  
            "Member"=[regex]::match($_.PartComponent,'Name="(.*)"').Groups[1].Value  
            "MemberType"=if($_.PartComponent -match 'Win32_Group'){"Group"}else{"User"}  
        }
    }
    $groupmembers |select Group,Member,MemberType | sort Group | export-csv $csvfile -Delimiter ";" -NoType -Encoding UTF8  
}

function Import-LocalGroupMembers([string]$csvfile){
    $csv = Import-CSV $csvfile -Delimiter ";" -Encoding UTF8  
    # create users
    Write-Host "Creating Users..." -ForegroundColor Green  
    $csv | ?{$_.MemberType -eq "User"} | select -Expand Member -Unique | %{  
        net user $_ /add
    }
    # create groups
    Write-Host "Creating Groups..." -ForegroundColor Green  
    $csv.Group | select -Unique | %{
        net localgroup $_ /add
    }
    # process membership
    Write-Host "Adding Members to Groups ..." -ForegroundColor Green  
    $csv | %{
        net localgroup $_.Group $_.Member /add
    }
}
Für den Export der Gruppenmitgliedschaften nutzt man dann die Funktion:
Export-LocalGroupMembers 'C:\membership.csv'
und den Import in das neue System:
Import-LocalGroupMembers 'C:\membership.csv'
Man sollte natürlich die Sonderkonten in der CSV noch bereinigen.

Das Script legt die Gruppen und User von sich aus an.
Fehlermeldungen im Script das Gruppen oder User schon existieren kann man ignorieren (ja ich gebs zu da war ich faul face-wink).

Für den Fall das du einen Server 2003 hast den du umziehen musst, welcher noch kein Powershell von Haus aus installiert hat, kannst du für den Export der Mitgliedschaften folgendes VBS-Script nutzen das dir ebenfalls eine CSV-Datei erstellt, die du dann wieder für den Import mit Powershell nutzen kannst:
On Error Resume Next
Set fso = CreateObject("Scripting.Filesystemobject")  
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_GroupUser",,48)  
Set f = fso.OpenTextFile("users.csv",2,True)  
f.WriteLine "Group;Member;MemberType"  
For Each objItem in colItems
	strGroup = Trim(Split(Split(objItem.GroupComponent,",",2,1)(1),"""",-1,1)(1))  
	strUser = Trim(Split(Split(objItem.PartComponent,",",2,1)(1),"""",-1,1)(1))  
	If InStr(1,objItem.PartComponent,"Win32_Group",1) > 0 Then  
		strMemberType = "Group"  
	Else
		strMemberType = "User"  
	End If
	f.WriteLine strGroup & ";" & strUser & ";" & strMemberType  
Next
f.Close
MsgBox "Finished Export",vbInformation  
Benutzung wie immer auf eigene Gefahr und Leben face-wink

Grüße Uwe