marabunta
Goto Top

Powershell anonymous FTP Upload

Hallo,

ich will eine Datei hochladen, anonymous Zugriff ist auf der QNAP Nas aktiviert.
Dann noch ein Skript gefunden und siehe da, es geht nicht:

$File = "C:\Users\USER\Desktop\upme.ps1";  
$ftp = "ftp://anonymous:anonymous@url.de/testumgebung/upme.ps1";  
$webclient = New-Object -TypeName System.Net.WebClient;
$uri = New-Object -TypeName System.Uri -ArgumentList $ftp;
$webclient.UploadFile($uri, $File);

Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en):  "Der Remoteserver hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z.B. nicht gefunden oder kein Zugriff)."  
In C:\Users\USER\Desktop\uploadftp.ps1:83 Zeichen:1
+ $webclient.UploadFile($uri, $File);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : WebException

Auf der NAS haben Gäste auf den Pfad Vollzugriff und lokal existiert die Datei ungeöffnet, wo ist der Fehler?
Danke.

Content-Key: 300209

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

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: 114757
Lösung 114757 27.03.2016 aktualisiert um 15:37:21 Uhr
Goto Top
Moin,
kann ja so auch nicht funktionieren.

Guckst du für gescheite Funktionen für FTP hier:
PowerShell + FTP in EXE

Gruß jodel32
Mitglied: Marabunta
Marabunta 27.03.2016 um 15:47:07 Uhr
Goto Top
function Upload-File([string]$path,[string]$url,$username,$password){
    $path
    $url
    $username
    $password
    try{
        $request = [System.Net.FtpWebRequest]::Create($url)
        $request.Method = [System.Net.WebRequestMethods+FTP]::UploadFile
        $request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
        [bytes[]] $bytes = [System.IO.File]::ReadAllBytes($path)
        [System.IO.Stream]$stream = $request.GetRequestStream();
        $stream.Write($bytes,0,$bytes.Length)
        $stream.Close(); $stream.Dispose()
        $response = [System.Net.FtpWebResponse]$request.GetResponse()
        $result = $response.StatusDescription
        $response.Close()
        return $result
    }catch{
        throw $_.Exception.Message
        return $false
    }
}
Upload-File -path $File -url $ftp -username $username -password $password 


C:\Users\USER\Desktop\file.exe
ftp://url.de/testumgebung/upme.ps1
anonymous
anonymous

Der Typ [bytes] wurde nicht gefunden.
In C:\Users\USER\Desktop\uploadftp.ps1:103 Zeichen:9
+         throw $_.Exception.Message
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Der Typ [bytes] wurde nicht gefunden.:String) , RuntimeException
    + FullyQualifiedErrorId : Der Typ [bytes] wurde nicht gefunden.

Ich dachte erst es liegt an der 0byte großen Datei, aber auch mit einer 15mb exe kam der gleiche Fehler.
Mitglied: Marabunta
Marabunta 27.03.2016 aktualisiert um 15:52:44 Uhr
Goto Top
der Befehl alleine funktioniert:
[System.IO.File]::ReadAllBytes($path)

aber das löst den Fehler aus:
[bytes[]] $bytes = [System.IO.File]::ReadAllBytes($path)

PSVersion 5.0.10586.122
Mitglied: 114757
Lösung 114757 27.03.2016 aktualisiert um 15:56:48 Uhr
Goto Top
Da ist ein Tippfehler drin, das muss
[byte[]] lauten ohne das s.
Mitglied: Marabunta
Marabunta 27.03.2016 um 15:58:31 Uhr
Goto Top
Das wars, vielen Dank!