PowerShell eine Verbindung zu FTP-server und abrufen von Dateien
$ftpServer = "ftp.example.com"
$username ="validUser"
$password ="myPassword"
$localToFTPPath = "C:\ToFTP"
$localFromFTPPath = "C:\FromFTP"
$remotePickupDir = "/Inbox"
$remoteDropDir = "/Outbox"
$SSLMode = [AlexPilotti.FTPS.Client.ESSLSupportMode]::ClearText
$ftp = new-object "AlexPilotti.FTPS.Client.FTPSClient"
$cred = New-Object System.Net.NetworkCredential($username,$password)
$ftp.Connect($ftpServer,$cred,$SSLMode) #Connect
$ftp.SetCurrentDirectory($remotePickupDir)
$ftp.GetFiles($localFromFTPPath, $false) #Get Files
Dies ist das Skript, das ich habe für den Import von Dateien von einem FTP-server.
Aber ich bin nicht sicher, was ist der remotePickupDir
und ist dieses script richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Remote-pick-directory-Pfad sollte der genaue Pfad auf dem ftp-server, den Sie tryng zu zugreifen..
hier ist das script zum download von Dateien aus dem server..
Sie können hinzufügen oder ändern mit SSLMode..
Den AlexFTPS Bibliothek verwendet in der Frage scheint tot zu sein (wurde nicht aktualisiert, seit 2011).
Mit keine externen Bibliotheken
Alternativ, Sie können versuchen, um dies zu implementieren, die ohne jegliche externe Bibliothek verwendet wird. Leider ist aber weder die .NET Framework noch PowerShell haben eine explizite Unterstützung für das herunterladen von allen Dateien in einem Verzeichnis (lassen nur rekursive Datei-downloads).
Implementieren Sie selbst:
Schwierige Teil ist, zu identifizieren, Dateien aus Unterverzeichnissen. Es gibt keine Möglichkeit zu tun, die in einer tragbaren Weise mit den .NET framework (
FtpWebRequest
oderWebClient
). Die .NET framework leider nicht unterstütztMLSD
Befehl, das ist der einzige tragbare Möglichkeit zum abrufen directory-listing mit dem Datei-Attribute im FTP-Protokoll. Siehe auch Prüfen, ob Objekt auf dem FTP-server ist die Datei oder das Verzeichnis.Ihre Optionen sind:
ListDirectory
Methode (NLST
FTP-Befehl) und laden Sie einfach alle "Namen" als Dateien.LIST
Befehl =ListDirectoryDetails
- Methode) und versuchen zu analysieren, eine server-spezifische Liste. Viele FTP-Server mit *nix-Stil Auflistung, wo identifizieren Sie ein Verzeichnis, indem died
ganz am Anfang des Eintrags. Aber viele Server, die ein anderes format verwenden. Das folgende Beispiel nutzt dieses Vorgehen (vorausgesetzt, der *nix-format)Verwenden Sie die Funktion wie:
Den code übersetzt aus meinem C# - Beispiel in C# - Download aller Dateien und Unterverzeichnisse per FTP.
Mit 3rd-party-Bibliothek
Wenn Sie wollen vermeiden, dass Probleme mit der Analyse der server-spezifische, Verzeichnisliste Formate, verwenden Sie ein 3rd-party-Bibliothek, die unterstützt die
MLSD
Befehl und/oder Analyse von verschiedenenLIST
listing-Formate. Und idealerweise mit Unterstützung für das herunterladen von allen Dateien aus einem Verzeichnis oder auch rekursiv downloads.Beispielsweise mit WinSCP .NET-assembly können Sie download ganze Verzeichnis mit einem einzigen Aufruf zu
Session.GetFiles
:Intern, WinSCP verwendet das
MLSD
Befehl, wenn vom server unterstützt wird. Wenn nicht, verwendet es dieLIST
- Befehl und unterstützt Dutzende von verschiedenen angebotsformate.Den
Session.GetFiles
Methode ist standardmäßig rekursiv.(Ich bin der Autor von WinSCP)
Hier ist der vollständige funktionierende code für den download aller Dateien (mit wildcard oder eine Datei-Erweiterung) von der FTP-site zu einem lokalen Verzeichnis. Legen Sie die variable Werte.
Den
remotePickupDir
wäre der Ordner, den Sie wollen zu gehen, um auf den ftp-server. So weit wie "ist dieses script richtig", na ja, funktioniert es? Wenn es funktioniert, dann ist es richtig. Wenn es nicht funktioniert, dann sagen Sie uns, welche Fehlermeldung oder ein unerwartetes Verhalten, die Sie bekommen, und wir werden besser in der Lage sein, um Ihnen zu helfen.Für das abrufen von Dateien /Ordner von einem FTP-Server über powerShell schrieb ich einige Funktionen kann man sogar noch versteckte Sachen von FTP.
Beispiel für alle Dateien die nicht versteckt in einem bestimmten Ordner:
Beispiel für alle Ordner(auch versteckte) in einen bestimmten Ordner:
Können Sie kopieren Sie einfach die Funktionen aus dem Modul, ohne-und 3rd-Bibliothek installieren:
https://github.com/AstralisSomnium/PowerShell-No-Library-Just-Functions/blob/master/FTPModule.ps1
Tut mir Leid, aber ich finde alle Antworten, die off-track. Wenn powershell wurde wirklich verstanden, wie eine Muschel, Sie würden nur plumb Ihre Lieblings-foolproof native ftp-Programm und mit ihm getan werden. Der vernünftige Ansatz ist ein gutes Werkzeug für eine bestimmte Aufgabe, und das bedeutet, dass ein feature-rich-Betriebssystem bietet eine Vielzahl von Kommandozeilen-tools. MS fand nie, dass der Pfad, und es ist immer noch ein Schmerz zu tun, die grundlegende Arbeit. Warum nicht tauschen ökosystem durch die Installation von cygwin und ncftp?