PowerShell Verbinden Sie sich mit dem FTP-Server und holen Sie sich Dateien

8
%Vor%

Dies ist das Skript, das ich zum Importieren von Dateien von einem FTP-Server bekommen habe.
Ich bin mir aber nicht sicher, was remotePickupDir ist und ist dieses Skript korrekt?

    
user2744565 27.09.2013, 20:18
quelle

5 Antworten

3

Der Remote-Verzeichnispfad sollte der genaue Pfad auf dem FTP-Server sein, auf den Sie zugreifen möchten. Hier ist das Skript zum Herunterladen von Dateien vom Server .. Sie können hinzufügen oder ändern mit SSLMode ..

%Vor%     
Manoj Patil 28.09.2013, 03:53
quelle
15

Die in der Frage verwendete AlexFTPS-Bibliothek scheint tot zu sein (wurde seit 2011 nicht aktualisiert).

Alternativ können Sie versuchen, dies ohne externe Bibliothek zu implementieren. Leider haben weder .NET Framework noch PowerShell eine explizite Unterstützung für das Herunterladen aller Dateien in einem Verzeichnis (lassen Sie nur rekursive Dateidownloads zu).

Sie müssen das selbst implementieren:

  • Listen Sie das entfernte Verzeichnis auf
  • Iteriere die Einträge, lade Dateien herunter (und speichere optional in Unterverzeichnissen - listet sie erneut auf usw.)

Der Trick besteht darin, Dateien aus Unterverzeichnissen zu identifizieren. Mit dem .NET-Framework ( FtpWebRequest oder WebClient ) ist dies nicht möglich. Das .NET-Framework unterstützt leider nicht den Befehl MLSD , der die einzige Möglichkeit ist, Verzeichnislisten mit Dateiattributen im FTP-Protokoll abzurufen. Siehe auch Überprüfen, ob das Objekt auf dem FTP-Server eine Datei oder ein Verzeichnis ist .

Ihre Optionen sind:

  • Wenn Sie wissen, dass das Verzeichnis keine Unterverzeichnisse enthält, verwenden Sie die Methode ListDirectory ( NLST FTP) und laden Sie einfach alle "Namen" als Dateien herunter.
  • Führen Sie eine Operation für einen Dateinamen durch, der für die Datei fehlschlägt und für Verzeichnisse (oder umgekehrt) erfolgreich ist. I.e. Sie können versuchen, den "Namen" herunterzuladen.
  • Vielleicht haben Sie Glück und in Ihrem speziellen Fall können Sie eine Datei aus einem Verzeichnis mit einem Dateinamen unterscheiden (d. h. alle Ihre Dateien haben eine Erweiterung, während Unterverzeichnisse dies nicht tun)
  • Sie verwenden eine lange Verzeichnisliste ( LIST command = ListDirectoryDetails method) und versuchen, eine serverspezifische Auflistung zu analysieren. Viele FTP-Server verwenden einen * nix-style-Eintrag, in dem Sie ein Verzeichnis am Anfang des Eintrags durch d identifizieren. Viele Server verwenden jedoch ein anderes Format. Das folgende Beispiel verwendet diesen Ansatz (unter der Annahme des * nix-Formats)
%Vor%

Verwenden Sie die Funktion wie folgt:

%Vor%

Der Code wurde aus meinem C # -Beispiel in C # übersetzt. Laden Sie alle Dateien und Unterverzeichnisse über FTP herunter .

Wenn Sie Probleme beim Parsen der serverspezifischen Verzeichnislistenformate vermeiden möchten, verwenden Sie eine Bibliothek von Drittanbietern, die den Befehl MLSD unterstützt und / oder verschiedene Auflistungsformate von LIST analysiert. Und im Idealfall mit einer Unterstützung für das Herunterladen aller Dateien aus einem Verzeichnis oder sogar rekursive Downloads.

Zum Beispiel mit WinSCP .NET Assembly können Sie das ganze Verzeichnis mit einem einzigen Aufruf nach Session.GetFiles :

%Vor%

Intern verwendet WinSCP den Befehl MLSD , wenn er vom Server unterstützt wird. Wenn nicht, verwendet es den Befehl LIST und unterstützt Dutzende verschiedener Auflistungsformate.

Die Methode Session.GetFiles ist standardmäßig rekursiv.

(Ich bin der Autor von WinSCP)

    
Martin Prikryl 05.10.2016 16:15
quelle
4

Hier ist der vollständige Funktionscode, um alle Dateien (mit Platzhalter oder Dateierweiterung) von der FTP-Site in das lokale Verzeichnis herunterzuladen. Legen Sie die Variablenwerte fest.

%Vor%     
Arkesh Patel 21.03.2016 19:25
quelle
1

Der remotePickupDir wäre der Ordner, den Sie auf dem FTP-Server aufrufen möchten. Soweit "ist dieses Skript korrekt", nun, funktioniert es? Wenn es funktioniert, ist es korrekt. Wenn es nicht funktioniert, sagen Sie uns, welche Fehlermeldung oder unerwartetes Verhalten Sie erhalten und wir können Ihnen besser helfen.

    
Nate Hekman 27.09.2013 21:41
quelle
-1

Zum Abrufen von Dateien / Ordner von FTP über PowerShell habe ich einige Funktionen geschrieben, Sie können sogar versteckte Sachen von FTP bekommen.

Beispiel für das Abrufen aller Dateien, die nicht in einem bestimmten Ordner versteckt sind:

%Vor%

Beispiel für das Abrufen aller Ordner (auch ausgeblendet) in einem bestimmten Ordner:

%Vor%

Sie können einfach die Funktionen des folgenden Moduls kopieren, ohne die dritte Bibliothek installieren zu müssen: Ссылка

    
AstralisSomnium 26.09.2016 13:12
quelle

Tags und Links