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
  }

1 Antwort

  1. Michael sagt:

    Gutes Skript, danke dafür, das werde ich sicherlich mal verwenden bei einer VDI Migration.

Schreibe einen Kommentar zu Michael Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.