Netzwerk Drucker Export/Import bei VDI Migrationen
Wird eine Citrix Virtual Apps & Desktops oder Remote Desktop Session Host Umgebung komplett durch eine Parallel-Installation migriert oder werden bei einer Migration neue Profile notwendig, ist es ein häufiges Thema, die Netzwerkdrucker der User von der alten Umgebung in die neue Umgebung zu migrieren. Hierzu habe ich schon die abgefahrensten PowerShell Skripte gesehen, die ich hier leider nicht zum Besten geben kann (weil sie leider nicht von mir sind :-)).
Daher habe ich mich auf zwei einfache Export- und Import-Skripte beschränkt, welche aber trotzdem ihren Dienst tun und eine einfache Migration der Netzwerk-Drucker ermöglichen.
Alles was man dazu benötigt ist ein Netzwerk-Share, auf dem die Benutzer schreiben dürfen, um die Export-Dateien abzulegen.
Ein Hinweis am Rande:
Legt man in seinen VDI Umgebungen Wert auf Sicherheit, sollte natürlich die Ausführung von cmd.exe, wscript.exe/cscript.exe und powershell.exe/powershell_ise.exe samt der jeweiligen Skipte auf den Citrix Server für einen Standard-Benutzer gesperrt sein. Um die Skripte dennoch nutzen zu können, lassen sie sich mit Hilfe des Tools PS2EXE-GUI in ausführbare EXE-Dateien konvertieren. Das Tool hat mich schon mehrfach gerettet, um meine Umgebungen per Scripts zu administrieren, trotz der o.g. Restriktionen.
Export
Im ersten Schritt müssen die bisher in der alten Infrastruktur verbundenen Netzwerkdrucker exportiert werden. Ich verwende dazu das Get-Printer
Cmdlet und das Export-Clixml
Cmdlet, um die Drucker in ein XML-File zu exportieren. Das Script lasse ich entweder beim Logon oder Logoff des Users laufen und exportiere die Netzwerkdrucker auf einen Share. Das XML-File wird wie der User benannt. In das XML-File werden mehrere Druckerinformationen exportiert, prinzipiell würde es rechen, das Name
-Attribute zu exportieren
# NetworkPrinterExport.ps1 $printerxml = "\\Server\Share\$env:USERNAME.xml" Get-Printer | Where-Object {$_.Type -eq "Connection"} | Select-Object Name,Type,Computername,Sharename | Export-Clixml $printerxml
Der Inhalt des XML-Files für 2 Drucker sieht dann in etwa so aus:
<?xml version="1.0"?> -<Objs xmlns="http://schemas.microsoft.com/powershell/2004/04" Version="1.1.0.1"> -<Obj RefId="0"> -<TN RefId="0"> <T>Selected.Microsoft.Management.Infrastructure.CimInstance</T> <T>System.Management.Automation.PSCustomObject</T> <T>System.Object</T> </TN> -<MS> <S N="Name">\\printserver\printer01</S> <S N="Type">Connection</S> <S N="Computername">printserver</S> <S N="Sharename">printer01</S> </MS> </Obj> -<Obj RefId="1"> <TNRef RefId="0"/> -<MS> <S N="Name">\\printserver\printer02</S> <S N="Type">Connection</S> <S N="Computername">printserver</S> <S N="Sharename">printer02</S> </MS> </Obj> </Objs>
Import
In der neuen Infrastruktur muss das exportierte XML-File beim Logon des Users nun wieder importiert werden. Dazu wird das Import-Clixml
Cmdlet und das Add-Printer
Cmdlet verwendet. Entweder realisiert man dies per Logon Script oder z.B. per einmalig ausgeführtem External Task mit WEM.
# NetworkPrinterImport.ps1 $printerxml = "\\Server\Share\$env:USERNAME.xml" $printername = (Import-Clixml -Path $printerxml | Select-Object Name).name foreach ($printername in $printerxml) { Add-Printer -ConnectionName $printername }
Gutes Skript, danke dafür, das werde ich sicherlich mal verwenden bei einer VDI Migration.