Es ist einfach, Dateien mit PowerShell Copy-Item über die Kommandozeile zu kopieren. Wenn Sie dann die Quelle und das Ziel eingeben, passiert es einfach. Unglücklicherweise denken viele Administratoren nicht darüber nach, wie dieser Prozess eigentlich passiert bis er nicht mehr funktioniert. Ob Sie darüber nachdenken oder nicht – alle Netzwerkkommunikation über TCP (wie SMB-Dateikopien) benutzen Ports, um die Bits zu übertragen. Damit ein Dateikopierprozess die Datei von Punkt A zu Punkt B übertragen kann, muss der Port für den gesamten Weg bis zum Zielknoten auf sein. Im Falle einer SMB-Dateikopie ist das der Port 445. Das ist ein Port, der gewöhnlich intern offen ist, außer in einigen Situationen, die extrem hohe Sicherheit verlangen oder über ein DMZ.
Wie können Sie sicherstellen, dass Ihre Skripts zu jeder Zeit Dateien auf Knoten kopieren können, wenn Sie in einer Umgebung arbeiten, die extrem hohe Sicherheitsanforderungen hat oder wenn Sie Dateien von einem internen Netzwerk in ein DMZ transferieren müssen, das verschiedene Port-Restriktionen hat? Sie können dazu PowerShell v5's Copy-Item cmdlet mit dem neuen –ToSession Parameter benutzen.
Dieser Parameter wurde mit dem Windows Management Framework (WMF) v5 mit Copy-Item cmdlet eingeführt. Er bietet die Möglichkeit, Dateien über den gleichen Link zu transferieren, den Sie wahrscheinlich jetzt benutzen, um Kommandos per Fernzugriff mit cmdlets wie Invoke-Command durchzuführen.
Der Prozess hat einige Vorteile, aber einer von den größten Vorteilen sind die TCP-Ports, die benutzt werden: 5985 (HTTP) und 5986 (HTTPS). Diese Standardknoten sind meistens offen, um ferne Knoten zu verwalten, manchmal sogar zu einer DMZ-Umgebung. Durch die Benutzung von Copy-Item –ToSession kann der Administrator sicherstellen, dass die Dateien immer kopiert werden können, egal ob SMB blockiert ist oder nicht.
Wenn Sie PowerShell Copy-Item via die traditionelle SMB-Methode benutzen, müssen Sie die Pfad- und Ziel-Parameter präzisieren. Wenn Sie eine Datei names “file1.txt”, die sich auf dem Laufwerk C:\ befindet auf einen entfernten Computer SERVER1 auf dessen Laufwerk C:\ kopieren möchten, können Sie folgendes machen:
Copy-Item –Path C:\Folder1\file1.txt –Destination '\\SERVER1\c$'
Beachten Sie, dass dabei der UNC-Pfad benutzt wird. Es wird gleich erklärt, warum das wichtig ist.
Was passiert aber wenn SMB blockiert ist oder Sie sowieso Invoke-Command benutzen, um Kommandos von SERVER1 auszuführen? Sie können dann PowerShell-Remoting-Sessions benutzen, um Dateien über WinRM anstatt SMB auszuführen. Dazu müssen Sie eine neue Remoting-Session erstellen und die Dateien dann über diese kopieren.
Als erstes sollten Sie dafür eine neue PowerShell-Remoting-Session erstellen. Dafür können Sie das New-PSSession cmdlet benutzen und dann die Session der Variable $session zuordnen.
$session = New-PSSession –ComputerName SERVER1
Dadurch wird Kerberos-Authentifizierung benutzt, um eine neue PowerShell-Remoting-Session herzustellen, welches die gebräuchlichste Methode ist, wenn Sie in einer Active Directory-Umgebung arbeiten.
Als nächstes müssen Sie die ToSession-Parameter angeben und einen lokalen Pfad auf dem Remote-Computer als Ziel-Parameter angeben.
Copy-Item –Path C:\Folder1\file1.txt –Destination 'C:\' –ToSession $session
Beachten Sie, dass Sie jetzt C:\ als Ziel benutzen anstatt den UNC-Pfad. Dieser Befehl dient genau dem gleichen Zweck wie der vorige, aber er benutzt die Session, um die Datei zu umschließen und via WinRM zu transferieren.
Vergessen Sie nicht, durch Remove-PSSession die Session zu entfernen.
$session | Remove-PSSession
Wenn Sie die Session nicht weiter brauchen, können Sie sie auch erstellen und gleich wieder entfernen.
Copy-Item –Path C:\Folder1\file1.txt –Destination 'C:\' –ToSession (New-PSSession –ComputerName SERVER1)
Und das war’s schon! Das nächste Mal, wenn Sie in einer Umgebung arbeiten, in der PowerShell Remoting erlaubt ist, aber SMB eingeschränkt ist, oder Sie bereits eine Remoting-Session für etwas anderes benutzen, können Sie die Session für Copy-Item benutzen, um die Dateien leicht von Punk A zu Punkt B zu bringen.
Tipp: Lesen Sie dazu auch das Whitepaper Automatisieren mit PowerShell oder laden Sie sich kostenfrei eine Testversion von MOVEit Automation, Software für die Automatisierung der Dateiübertragung, herunter.
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.
Lassen Sie sich von unseren Experten beibringen, wie Sie die erstklassigen Funktionen von Sitefinity nutzen können, um überzeugende digitale Erlebnisse zu bieten.
Weitere InformationenAbonnieren Sie, um alle Neuigkeiten, Informationen und Tutorials zu erhalten, die Sie benötigen, um bessere Business-Apps und -Websites zu erstellen