Powershell FTP-Upload schlägt fehl
Liebe Administratoren,
zu dem folgenden Skript bekomme ich leider eine Fehlermeldung:
Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en): "Ausnahmefehler während einer
WebClient-Anforderung."
In Zeile:12 Zeichen:1
+ FullyQualifiedErrorId : WebException
Nur warum?
Habe das Skript mehrfach in dieser Form auf x Seiten gefunden und scheinbar funktioniert es bei anderen.
zu dem folgenden Skript bekomme ich leider eine Fehlermeldung:
$File = "D:\Dev\somefilename.zip"
$ftp = "ftp://username:password@example.com/pub/incoming/somefilename.zip"
$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)
$webclient.UploadFile($uri, $File)
Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en): "Ausnahmefehler während einer
WebClient-Anforderung."
In Zeile:12 Zeichen:1
$webclient.UploadFile($uri, $File)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( , MethodInvocationException+ FullyQualifiedErrorId : WebException
Nur warum?
Habe das Skript mehrfach in dieser Form auf x Seiten gefunden und scheinbar funktioniert es bei anderen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 307874
Url: https://administrator.de/contentid/307874
Ausgedruckt am: 19.11.2024 um 19:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo JohnnyCGN,
der Grund sind aktuelle IE Versionen, die das URI-Schema ftp://username:password@domain.de aus Sicherheitsgründen nicht mehr erlauben. Im Hintergrund eines WebClient-Objekts arbeitet nämlich die IE-Engine, deswegen schlägt diese Methode fehl. Das Schema kann man zwar in der Registry wieder freischalten ist aber aus erstens Sicherheitsgründen nicht empfehlenswert und zweitens ist das Skript dann nicht portabel auf allen Clients lauffähig.
Deswegen benutze diese funktionsfähige FTP-Funktionen die ich hier schon mal gespostet habe und welche nicht vom IE abhängig sind:
FTP UP und Download
Powershell: FTP Directorylisting
Hier nochmal alle meine FTP-Funktionen zusammengefasst:
Grüße Uwe
der Grund sind aktuelle IE Versionen, die das URI-Schema ftp://username:password@domain.de aus Sicherheitsgründen nicht mehr erlauben. Im Hintergrund eines WebClient-Objekts arbeitet nämlich die IE-Engine, deswegen schlägt diese Methode fehl. Das Schema kann man zwar in der Registry wieder freischalten ist aber aus erstens Sicherheitsgründen nicht empfehlenswert und zweitens ist das Skript dann nicht portabel auf allen Clients lauffähig.
Deswegen benutze diese funktionsfähige FTP-Funktionen die ich hier schon mal gespostet habe und welche nicht vom IE abhängig sind:
FTP UP und Download
Powershell: FTP Directorylisting
Hier nochmal alle meine FTP-Funktionen zusammengefasst:
function Upload-File([string]$path,[string]$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
}
}
function Download-File([string]$url,[string]$path,$username,$password){
try{
$request = [System.Net.FtpWebRequest]::Create($url)
$request.Method = [System.Net.WebRequestMethods+FTP]::DownloadFile
$request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$response = [System.Net.FtpWebResponse]$request.GetResponse()
[System.IO.Stream]$stream = $response.GetResponseStream()
[System.IO.FileStream]$outstream = New-Object System.IO.FileStream ($path,[System.IO.FileMode]::Create)
$stream.CopyTo($outstream)
$outstream.Close();$stream.Close();$response.Close()
$stream.Dispose();$outstream.Dispose();$response.Dispose()
return $true
}catch{
throw $_.Exception.Message
}
}
function List-FTPFiles([string]$url,$username,$password){
$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
}
function List-AllFTPFiles([string]$server,$username,$password){
function Get-FilesInDir([string]$path){
$filelist = @()
$request = [System.Net.FtpWebRequest]::Create("$server/$path")
$request.UseBinary = $false
$request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectoryDetails
$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)
$folderlist = $reader.ReadToEnd() -split [Environment]::NewLine | select -skip 2 | ?{$_ -ne ''}
$stream.Close();$response.Close();$reader.Close()
# Items durchlaufen
$folderlist | %{
$tokens = $_ -split '\s+'
$item = $tokens[8..($tokens.length-1)]
if ($_ -match '^d'){
Get-FilesInDir "$path/$item"
}else{
$filelist += "$path/$item"
}
}
$stream.Dispose();$response.Dispose();$reader.Dispose()
return $filelist
}
return Get-FilesInDir
}
function Delete-FtpFile([string]$url,$username,$password){
try{
$request = [System.Net.FtpWebRequest]::Create($url)
$request.Method = [System.Net.WebRequestMethods+FTP]::DeleteFile
$request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$response = [System.Net.FtpWebResponse]$request.GetResponse()
$result = $response.StatusDescription
$response.Close()
return $result
}catch{
throw $_.Exception.Message
return $false
}
}
$username = 'FTPUSER'
$password = 'PASSWORD'
$remotefile = 'ftp://ftp.domain.de/file.csv'
$localfile = 'C:\Ordner\file.csv'
# Beispiele:
# -----------
# Download-File -url $remotefile -path $localfile -username $username -password $password
# Upload-File -path $localfile -url $remotefile -username $username -password $password
# List-FTPFiles -url 'ftp://ftp.domain.de/ordner/*.log' -username $username -password $password
# List-AllFTPFiles -server 'ftp://ftp.domain.de' -username $username -password $password
# Delete-FtpFile -url $remotefile -username $username -password $password
Grüße Uwe
Kommt hier noch Rückmeldung ?
Ansonsten...
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Ansonsten...
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.