Nachdem man – hoffentlich – erfolgreich einen Druckserver von einem Windows-Server auf einen anderen umgezogen hat ist der nächste Schritt die Umstellung auf den Clients. Wenn ich nicht Gruppenrichtlinien zur Druckerzuordnung verwenden kann verwende ich ein VB-Sript um die Drucker des Benutzers umzuziehen. Wenn der Benutzer das Script ausführt – entweder über eine Gruppenrichtlinie verteilt oder per login-script – werden die alten Drucker gelöscht und die Drucker automatisch über den neuen Druckserver verbunden – inklusive das setzten des Standarddruckers.

Bitte beachten: Die Freigabenamen der Drucker auf dem alten und auf dem neuen Druckserver müssen gleich sein. Falls es die für den alten Drucker verwendete Freigabe auf dem neuen Druckserver nicht gibt wird der Drucker gelöscht.

Hier das Script – die Variablen from_sv und to_sv anpassen und als .vbs abspeichern

 
Option Explicit
Dim from_sv, to_sv, PrinterPath, PrinterName, DefaultPrinterName, DefaultPrinter
Dim DefaultPrinterServer, SetDefault, key
Dim spoint, Loop_Counter, scomma
Dim WshNet, WshShell
Dim WS_Printers
DefaultPrinterName = ""
spoint = 0
scomma = 0
SetDefault = 0
set WshShell = CreateObject("WScript.shell")

from_sv = "\\sv-alt" 'Der alte Druckserver.
to_sv = "\\sv-neu" 'Der neue Druckserver.

On Error Resume Next
key = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"
DefaultPrinter = LCase(WshShell.RegRead (key))

If Err.Number <> 0 Then
	DefaultPrinterName = ""
else
spoint = instr(3,DefaultPrinter,"\")+1

DefaultPrinterServer = left(DefaultPrinter,spoint-2)

	if lcase(DefaultPrinterServer) = from_sv then
		DefaultPrinterName = mid(DefaultPrinter,spoint,len(DefaultPrinter)-spoint+1)
		scomma = instr(DefaultPrinterName,",")
		DefaultPrinterName = left(DefaultPrinterName,scomma -1)
	end if
end if

Set WshNet = CreateObject("WScript.Network")
Set WS_Printers = WshNet.EnumPrinterConnections

For Loop_Counter = 0 To WS_Printers.Count - 1 Step 2
	PrinterPath = lcase(WS_Printers(Loop_Counter + 1))

	if lcase(LEFT(PrinterPath,len(from_sv))) = from_sv then
		spoint = instr(3,PrinterPath,"\")+1
		PrinterName = mid(PrinterPath,spoint,len(PrinterPath)-spoint+1)
		WshNet.RemovePrinterConnection from_sv+"\"+PrinterName
		if lcase(PrinterName) <> "c6100" then
			WshNet.AddWindowsPrinterConnection to_sv+"\"+PrinterName
			if DefaultPrinterName = PrinterName then
				WshNet.SetDefaultPrinter to_sv+"\"+PrinterName
			end if
		end if
	end if
Next
Set WS_Printers = Nothing
Set WshNet = Nothing
Set WshShell = Nothing

' wscript.echo "Drucker migriert"

Wenn man das Script z.B. in einem Logon-Script beim Anmelden des Benutzers ausführen lässt, muss man in der Login-BAT bzw. CMD die Zeile

cscript //nologo drucker-migrieren.vbs

einfügen.

Dann werden beim anmelden alle Drucker automatisch umgezogen.

Funktionierte bei mir schon bei einigen Migrationen wunderbar 🙂

Hier ist das Script in einm ZIP zum Download: drucker-migrieren.zip

Quelle: https://gallery.technet.microsoft.com/

Wenn man bei vielen Benutzern in einem Active Directory den Server im Profilpfad oder im Basisordner (Home, Home Folder) ändern muss – und nicht alle User einzeln über die GUI ändern will – kann man das am besten über die PowerShell machen.

So kann man bei allen Benutzer in einem Rutsch den Servernamen im UNC-Pfad des Profiles ändern:

Import-Module ActiveDirectory

$oldServerName = "sv-alt"
$newServerName = "sv-neu"

[array]$AllUsers = Get-ADUser -filter * -Properties profilepath | Where-Object {$_.profilepath -ne $null}

foreach($user in $AllUsers){

if(($user.profilepath.ToString()).contains($oldServerName)){
$profilepath = ($user.profilepath.ToString()) -replace $oldServerName, $newServerName
Set-ADUser $user.DistinguishedName -profilepath $profilepath
}

}

und so kann man bei allen Benutzern den Server im UNC-Pfad des Basisordners ändern:

Import-Module ActiveDirectory

$oldServerName = "sv-alt"
$newServerName = "sv-neu"

[array]$AllUsers = Get-ADUser -filter * -Properties HomeDirectory | Where-Object {$_.homedirectory -ne $null}

foreach($user in $AllUsers){

if(($user.HomeDirectory.ToString()).contains($oldServerName)){
$homeDirectory = ($user.HomeDirectory.ToString()) -replace $oldServerName, $newServerName
Set-ADUser $user.DistinguishedName -HomeDirectory $homeDirectory
}

}

Einfach die Servernamen anpassen und am besten in ein Powershell-Script (z.b home.ps1 und/oder profile.ps1) speichern und am Domänencontroller ausführen.

Ich überprüfe immer mit dem Befehl vorher und danach ob alles geklappt hat 🙂

HomePath-ProfilePath-BulkChange

So kann man wunderbar und superschnell eine schöne Bulk-Migration der Home Folder bzw. Profile machen 🙂

Die Scripte können hier runtergeladen werden: HomePath-ProfilePath-Bulk.zip

Quelle: https://community.spiceworks.com

Aufgabenstellung: einen DHCP-Server migrieren und die Konfiguration – inkl. Reservierungen, Optionen, etc – übernehmen.

Lösung: Powershell!

Auf dem neuen Server die DHCP-Rolle installieren – aber noch nicht in der Domäne autorisieren.

Dann auf dem neuen Server eine Powershell öffnen und als erstes einen Ordner erstellen

mkdir c:\dhcp

Dann exportieren wir die Konfiguration

Export-DhcpServer -ComputerName alter_DHCP_Server -Leases -File C:\dhcp\dhcpexp.xml –verbose

um sie anschließend direkt wieder zu importieren

Import-DhcpServer –ComputerName Neuer_DHCP_Server -Leases –File C:\dhcp\dhcpexp.xml -BackupPath C:\dhcp\ –Verbose

Danach auf dem alten DHCP-Server die Autorisierung aufheben und am besten noch den Dienst beenden.

Jetzt kann falls nötig der DHCP-Server auf dem neuen Server angepasst und anschließend autorisieren.

Fertig 🙂

Quelle: technikblog.rachfahl.de