pablovic
Goto Top

Powershell: FTP Directorylisting

Hi

Ich habe Probleme ein PS Script zu erstellen, dass mir eine Datei von einem FTP Server herunter lädt.
Und zwar kriege ich die Datei aber nur, wenn ich den Dateinamen vorher kenne, arbeite ich mit Wildcard krieg ich nen Fehler,
den Filenamen mit ls oder so anzeigen schaff ich nicht...

und hier brauche ich Hilfe.

Ich möchte/muss den Filename vor dem Download heruasfinden ala dir *.xml voila Filename.

Was ich bisher zustande gebracht habe.

$UserName = 'Der_User?  
$Password = 'Das_Passwort''  


$RemoteFileName = '/Pfad/EinExport_Laufnummer_2016-03.xml'  

$ServerName = 'ftp.derserver.tld'  

$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($UserName, $Password)


$uri = New-Object System.Uri("ftp://$ServerName/$RemoteFileName")  


#$webclient.DownloadFile($uri, $LocalFilePath)

Hier hänge ich beim URI Aufruf den exakten Filenamen an aber ich will den ja nicht jedesmal vorher naschauen, es soll ja automatisch gehen.

Ich stell mir jetzt so zwei Varianten vor, einmal: nimm einfach alles was auf .XML endet (*.XML) oder ich finde irgendwie den Filenamen zuerst heraus, schreib ihn in eine Variable und erstelle so einen Aufruf.

Aber Wildcards scheint er nicht zu mögen und gibt einen Fehler beim URI Aufruf aus:

Ausnahme beim Aufrufen von "DownloadString" mit 1 Argument(en):  "Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht   
verfügbar (z.B. nicht gefunden oder kein Zugriff)."  
In Das Skript.ps1:18 Zeichen:1
+ $webclient.downloadstring($uri)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : WebException

Und wie ich mit webclient Objekt zu einem Listing komme finde ich nicht heraus, kann mir jemand einen Hinweis geben?

Thx pab

Content-ID: 301042

Url: https://administrator.de/contentid/301042

Ausgedruckt am: 19.11.2024 um 22:11 Uhr

colinardo
Lösung colinardo 06.04.2016 aktualisiert um 12:19:14 Uhr
Goto Top
Hallo @pablovic,
machst du mit der ListDirectory Request-Methode, hier eine einfache Funktion zum Auflisten von bestimmten Dateien eines Verzeichnisses mit Wildcards.
function List-FTPFiles([string]$url,$username,$password){
    try{
        $request = [System.Net.FtpWebRequest]::Create($url)
        $request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
        $request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
        $response = [System.Net.FtpWebResponse]$request.GetResponse()
        [System.IO.Stream]$stream = $response.GetResponseStream()
        $reader = new-object System.IO.StreamReader($stream)
        $list = $reader.ReadToEnd() -split "`n"  
        $stream.Close();$response.Close();$reader.Close()
        $stream.Dispose();$response.Dispose();$reader.Dispose()
        return $list
    }catch{
        throw $_.Exception.Message
    }
}
List-FTPFiles -url 'ftp://ftp.domain.de/ordner/*.xml' -username 'max.muster' -password 'GEHEIM'  
Als Ausgabe erhältst du dann ein Array aus den gefundenen Dateinamen.

Weitere FTP-Funktionen zum Download und Upload findest du von mir auch hier in diesem Post:
PowerShell + FTP in EXE

Grüße Uwe
pablovic
pablovic 06.04.2016 um 12:39:55 Uhr
Goto Top
Hi Uwe

Grosses Kino diese Funktion, danke.
Ich hab den Thread auch gesehen, hab aber die List Funktion vermisst.

Damit und den anderen Funktionen sollte ich ziemlich weit kommen, auch wenn sie mein Verständnis weit überschreiten.

Thx a lot
colinardo
colinardo 06.04.2016 aktualisiert um 12:58:11 Uhr
Goto Top
Keine Ursache.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
BlueEyePhoenix
BlueEyePhoenix 21.09.2022 um 10:08:48 Uhr
Goto Top
Kann es sein das Windows was mit einem Update umgestellt hat seit dem 19.09.2022 bekomme ich beim Abfragen von FTP wie oben beschrieben folgenden Fehler?

Ausnahme beim Aufrufen von "GetResponse" mit 0 Argument(en): "Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff)."

Der Zugang stimmt denn mit Filezilla kann ich alles wie gewohnt einsehen.
colinardo
colinardo 21.09.2022 aktualisiert um 10:53:32 Uhr
Goto Top
Servus @BlueEyePhoenix.
Zitat von @BlueEyePhoenix:

Kann es sein das Windows was mit einem Update umgestellt hat seit dem 19.09.2022 bekomme ich beim Abfragen von FTP wie oben beschrieben folgenden Fehler?
Nein, funktioniert hier im Test weiterhin auch mit aktuellsten Updates W10/11 im Test ohne Probleme mit einem nicht verschlüsselnden FTP Server als Gegenstelle.
Ausnahme beim Aufrufen von "GetResponse" mit 0 Argument(en): "Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff)."
Wenn du diese Meldung bekommst hat das rein gar nichts mit der Powershell-Funktion an sich zu tun sondern mit dem FTP-Server. Also hat sich intern auf diesem entweder ein Verzeichnis verändert, ihm wurden FTP-Funktionsbefehle beschnitten, oder Berechtigungen geändert, oder Groß und Kleinschreibung werden auf diesem nun beachtet, in dem Fall die Schreibweise genau prüfen.

Grüße Uwe
BlueEyePhoenix
BlueEyePhoenix 21.09.2022 um 10:54:31 Uhr
Goto Top
Vielen Dank für die Antwort, die haben am FTP-Server auf TLS 1.2 wegen der Sicherheit angehoben. Gibt wohl immer wieder was neues face-big-smile
colinardo
colinardo 21.09.2022 aktualisiert um 10:58:00 Uhr
Goto Top
Zitat von @BlueEyePhoenix:

Vielen Dank für die Antwort, die haben am FTP-Server auf TLS 1.2 wegen der Sicherheit angehoben. Gibt wohl immer wieder was neues face-big-smile
Mit ftps kann die in .NET eingebaute Funktion sowieso nicht umgehen, die supportet nur unverschlüsseltes FTP.
Für FTPs &Co rate ich dir zu WinSCP.
BlueEyePhoenix
BlueEyePhoenix 26.09.2022 um 09:25:33 Uhr
Goto Top
Danke für die Hilfe habe es jetzt mit WinSCP umgesetzt. Damit geht es.