Copy-VMFile: Dateien in VMs unter Hyper-V kopieren


    Tags: ,

    Die Kopierfunktion von Hyper-V bietet keine GUI.Eine neue Funktion von Windows Hyper-V 2012 R2 erlaubt das Kopieren von Dateien in eingeschaltete VMs. Dazu muss man einen neuen Service der Integrationsdienste aktivieren. Für das Übertragen der Dateien steht nur das PowerShell-Cmdlet Copy-VMFile zur Verfügung. Aber auch sonst zeigt das neue Feature noch einige Limitierungen.

    Grundsätzlich kann man bei der Kommunikation mit virtuellen Maschinen die gleichen Mechanismen nutzen wie mit physikalischen PCs, so dass man normalerweise Dateien über eine Netzfreigabe in eine VM kopieren wird. Nachdem man in Hyper-V mit den Gastbetriebs­systemen über RDP interagiert, kann man auch über die Remotedesktop-Verbindung Dateien kopieren.

    Dateien über den Host in die VM übertragen

    Die neue Erweiterung der Integrationsdienste lässt sich aber auch dann nutzen, wenn die VM keine Netzanbindung hat. Die Kommunikation läuft über den Hypervisor und benötigt keine Konfiguration des Gastes. Dies funktioniert nach dem gleichen Muster wie VMConnect, das eine RDP-Session auf diesem Weg aufbaut.

    Die neue Gastdienstschnittstelle lässt sich im Hyper-V Manager aktivieren.

    Gastdienste aktivieren

    Der erste Schritt besteht darin, dass man im Hyper-V Manager unter den Einstellungen einer VM beim Punkt Integrationsdienste die Option Gastdienste aktiviert. Dies kann man alternativ auch über PowerShell erledigen:

    Enable-VMIntegrationService -VMName <Name-der-VM>" -Name "Gastdienstschnittstelle"

    Um sie wieder abzuschalten, ruft man Disable-VMIntegrationService nach dem gleichen Muster auf. Beide Aktionen lassen sich auf ein- und ausgeschaltete VMs anwenden.

    Prüfung der Gastdienstschnittstelle

    Die bisher spärliche Dokumentation des neuen Features gibt keine Auskunft darüber, welche Gastbetriebssysteme es unterstützt. Zwar lässt sich das Guest Service Interface auch für XP-VMs aktivieren, aber danach muss man damit rechnen, dass ein Kopieren von Dateien nicht funktioniert.

    Daher empfiehlt es sich, vor dem ersten Dateitransfer seinen Status zu überprüfen, auch wenn die aktuellsten Integrationsdienste installiert sind:

    Get-VM | Get-VMIntegrationService -Name "Gastdienstschnittstelle"

    Zu beachten ist hier, dass dieses Cmdlet die lokalisierte Bezeichnung für den Dienst erwartet, während Enable-VMIntegrationService den englischen Namen nimmt. Im Fall von älteren Gastsystemen wie XP kann die Eigenschaft PrimaryStatusDescription den Wert Kein Kontakt haben. In der Folge scheitern daher alle Kopierversuche.

    Kopieren mit Copy-VMFile

    Das eigentliche Kopieren von Dateien erfolgt dann über das Cmdlet Copy-VMFile, eine GUI steht dafür nicht zur Verfügung. An die erforderlichen Parameter -SourcePath und -DestinationPath übergibt man die Datei- bzw. Verzeichnisnamen für die Kopieraktion, über -Name spezifiziert man die virtuelle Maschine, die als Ziel dient.

    Schließlich existiert mit -FileSource noch eine weitere Pflichtangabe, die derzeit nur den Wert Host akzeptiert. Damit offenbart sich eine weitere erhebliche Einschränkung des neuen Features, weil es nur Dateien vom Hyper-V-Host in VMs kopieren kann, aber nicht von einer Admin-Workstation:

    Copy-VMFile -Name <Name-der-VM> -SourcePath "C:\users\mark\test.dat" -DestinationPath "c:\users\peter" -FileSource Host

    Wenn man dieses Beispiel in der PowerShell auf den Host ausführt, dann kopiert es die lokale Datei test.dat in die angegebene VM, und zwar in das Verzeichnis c:\users\peter. Wenn man möchte, dass eine eventuell vorhandene gleichnamige Datei überschrieben wird, dann verwendet man zusätzlich den Schalter -force.

    Möchte man den Befehl auf einer Workstation absetzen, dann spezifiziert man den Namen des Hosts über den Parameter -ComputerName, wobei der Wert von -SourcePath dann trotzdem einen Pfad und eine Datei auf dem Host spezifizieren muss. Eine weitere Limitierung besteht darin, dass man in -SourcePath keine Wildcards verwenden darf.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Ähnliche Beiträge

    Weitere Links

    2 Kommentare

    Irgendwie scheinst Du mir immer ein paar Jahre voraus zu sein (und meine Fragen im voraus zu beantworten) ...
    ;-)
    Kleine Korrektur/Anmerkung:
    Zumindest unter Win10-1709 muss sowohl bei "Get" als auch bei "Enable" der lokalisierte Name "Gastdienstschnittstelle" verwendet werden. Mit "Guest Service Interface" bekomme ich eine Fehlermeldung "keine Integrationskomponente mit dem angegebenen Namen gefunden".

    Bild von Wolfgang Sommergut

    Ich bin immer hinter den neuesten Features her ;-) Deine Anmerkung ist korrekt, der Name für das Interface wurde lokalisiert. Habe den PowerShell-Aufruf geändert.