marabunta

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.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 300209

Url: https://administrator.de/forum/powershell-anonymous-ftp-upload-300209.html

Ausgedruckt am: 01.05.2025 um 15:05 Uhr

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
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.
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
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.
Marabunta
Marabunta 27.03.2016 um 15:58:31 Uhr
Goto Top
Das wars, vielen Dank!