ToSession, FromSession: Dateien mit PowerShell auf Remote-PC kopieren

    Kostenlose Studie: Was verdienen IT-Experten wirklich? Gliederung der Gehälter nach Berufserfahrung, Position und Funktion. Jetzt herunterladen »

    (Anzeige)

    Dateien zwischen PCs kopierenZu den Neuerungen von PowerShell 5.0, das zum Lieferumfang von Windows 10 und Server 2016 gehört, zählen zwei zusätzliche Parameter für Copy-Item. Sie erlauben das Kopieren von Dateien über eine Remote-Session vom oder auf den entfernten Rechner. In Bezug auf die Session gelten indes einige Einschränkungen.

    Windows bietet bekanntlich einige Mechanismen, um Dateien zwischen Rechnern zu übertragen. Die gängigsten sind Freigaben über SMB oder der Transfer mittels FTP. Wenn man auf der Kommando­zeile arbeitet, dann ist es jedoch willkommen, dass man diese Aufgabe nun mit den Mitteln von PowerShell erledigen kann.

    Session für Kopieraktion erstellen

    Das Kopieren einer oder mehrerer Dateien von oder zu einem Remote-PC setzt voraus, dass man zu ihm erst eine Remote-Session aufbaut. Dies funktioniert mit Hilfe des Cmdlets New-PSSession:

    $session = New-PSSession -ComputerName "Win10-L1"

    Alternative Methoden für das Erzeugen einer Remote-Sitzung akzeptiert Copy-Item nicht. Dazu zählen New-CimSession und aus nahe­liegenden Gründen auch nicht Enter-PSSession, mit dem man eine interaktive Sitzung startet.

    Session an Copy-Item übergeben

    Im nächsten Schritt ruft man Copy-Item entweder mit dem Parameter ToSession oder FromSession auf, um eine Datei zum oder vom entfernten Rechner zu übertragen. Ihnen teilt man die zuvor eingerichtete Session mittels der dafür genutzte Variable mit:

    Copy-Item -FromSession $session -Path "C:\Users\me\Downloads\*.iso" -Destination "C:\Users\me\Download"

    In diesem Beispiel kopiert man mit FromSession alle .iso-Dateien vom Verzeichnis Downloads des Remote-PC auf den lokalen Rechner. Daher bezieht sich der Parameter Path, der die Quelle bezeichnet, auf das entfernte Dateisystem und Destination auf ein lokales Verzeichnis. Verwendet man ToSession, dann verhält es sich genau umgekehrt.

    Dateien vom entfernten auf den lokalen PC kopieren mit dem Parameter FromSession.

    Interoperabel mit Windows 8.1

    Möchte man auf diese Weise Verzeichnisse rekursiv kopieren oder vermeiden, dass im Ziel vorhandene Dateien überschrieben werden, dann muss man sich wie beim lokalen Kopieren auch hier mit den Eigenheiten von Copy-Item auseinander­setzen (siehe dazu: Copy-Item, Move-Item: Dateien kopieren und verschieben mit PowerShell).

    Die Parameter ToSession und FromSession von Copy-Item sind zwar erst ab PowerShell 5.0 verfügbar, aber wenn man von dort eine Session zu PowerShell 4.0 unter Windows 8.1 aufbaut, dann klappt das Kopieren trotzdem. Der umgekehrte Weg geht natürlich nicht, weil die ältere Version von Copy-Item die neuen Parameter nicht kennt.

    Dateien auf dem Remote-PC anzeigen

    Eine Hürde für das Kopieren von Dateien zwischen Rechnern kann häufig einfach darin bestehen, dass man ihre genauen Namen oder Speicherorte nicht kennt. Das Hantieren mit Shares und UNC-Pfaden wäre hier widersinnig, dann könnte man gleich die Kopieraktion auf diesem Weg veranlassen.

    Anzeigen von Dateien auf einem Remote-PC mit Invoke-Command und Get-ChilItem.

    Mit PowerShell-Mitteln lässt man sich die Dateien auf einem entfernten PC anzeigen, indem man dort mit Hilfe von Invoke-Command das Cmdlet Get-ChildItem ausführt:

    Invoke-Command -Session $session -ScriptBlock {gci -Path "C:\users\me\Downloads\" | select FullName}

    Typischerweise wird man Get-ChildItem vor Copy-Item aufrufen und dafür die gleiche Session nutzen, die man bereits für das anschließende Kopieren eingerichtet hat. Filtert man aus dem Ergebnis von gci (Alias für Get-ChildItem) die Eigenschaft FullName mit Select-Object, dann erhält man die kompletten Dateinamen inklusive Pfad.

    4 Kommentare

    Bild von kortex
    kortex sagt:
    29. August 2016 - 16:06

    Ich wollte mich nur mal für die vielen tollen Kniffe die man hier regelmäßig findet bedanken. Tolle Seite!

    Bild von Wolfgang Sommergut
    29. August 2016 - 16:45

    Danke :-)

    Bild von Windowsfenster
    Windowsfenster sagt:
    31. August 2016 - 10:02

    Sehr hilfreich. Danke für die Mühe und die sehr detaillierten Erklärungen!

    Bild von Yo
    Yo sagt:
    22. September 2017 - 10:41

    Welchen Umweg könnte man fahren wenn der Remote Server eine PS v2 hat und der lokale eine PS v5? Würden Sie dann mit vorhandener Session ein Drive auf dem lokalen aufmachen zB New-PSDrive -name X -provider FileSystem -Path C:\mytemp
    Wie aber würden Sie dann die File-Kopie von dem Remote PC auf den lokalen vornehmen? Copy-Item -Path 'external path' -Destination '\\localhost\X$' -FromSession $s funktioniert hier nämlich nicht.