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

Printed on: April 18, 2024 at 17:04 o'clock

Mitglied: 114757
Solution 114757 Mar 27, 2016 updated at 13:37:21 (UTC)
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
Member: Marabunta
Marabunta Mar 27, 2016 at 13:47:07 (UTC)
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.
Member: Marabunta
Marabunta Mar 27, 2016 updated at 13:52:44 (UTC)
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
Solution 114757 Mar 27, 2016 updated at 13:56:48 (UTC)
Goto Top
Da ist ein Tippfehler drin, das muss
[byte[]] lauten ohne das s.
Member: Marabunta
Marabunta Mar 27, 2016 at 13:58:31 (UTC)
Goto Top
Das wars, vielen Dank!