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.
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:
Und wie ich mit webclient Objekt zu einem Listing komme finde ich nicht heraus, kann mir jemand einen Hinweis geben?
Thx pab
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301042
Url: https://administrator.de/contentid/301042
Ausgedruckt am: 19.11.2024 um 22:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo @pablovic,
machst du mit der ListDirectory Request-Methode, hier eine einfache Funktion zum Auflisten von bestimmten Dateien eines Verzeichnisses mit Wildcards.
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
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'
Weitere FTP-Funktionen zum Download und Upload findest du von mir auch hier in diesem Post:
PowerShell + FTP in EXE
Grüße Uwe
Keine Ursache.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
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.
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.
Servus @BlueEyePhoenix.
Grüße Uwe
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.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)."
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
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
Mit ftps kann die in .NET eingebaute Funktion sowieso nicht umgehen, die supportet nur unverschlüsseltes FTP.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
Für FTPs &Co rate ich dir zu WinSCP.