I need help with a script that downloads files from an FTP site using credentials. Everything works until I get to the DownloadFile method for the .NET.webclient. It throws an Exception: Illegal characters in path. error and I can’t figure out if it’s the source or the target and I’ve renamed the folders and files to eliminate spaces and dashes but I still get the same error.
Here’s my script:
Function Get-FTPFiles{
[CmdLetBinding()]
Param(
[System.Uri]$uri='ftp://ftpsite/folder/subfolder/',
[string]$userid='username',
[string]$password='password'
)
$ftp=[system.net.ftpwebrequest]::Create($uri)
if($userid){$ftp.Credentials=New-Object System.Net.NetworkCredential($userid,$password)}
$ftp.Method=[system.net.webrequestmethods+ftp]::ListDirectoryDetails
$response=$ftp.GetResponse()
$strm=$response.GetResponseStream()
$reader=New-Object System.IO.StreamReader($strm,'UTF-8')
$list=$reader.ReadToEnd()
$list
$lines=$list.Split("`n")
foreach($line in $lines){
if($line){
$f=$line.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)
$names = [string] "$($f[8]) $($f[9]) $($f[10]) $($f[11]) $($f[12]) $($f[13]) $($f[14])"
$dt=[datetime]"$($f[5]) $($f[6]) $($f[7])"
$length=$f[4]
$hash=@{Name=$names;FileDate=$dt;Length=$length;}
New-Object PSObject -Property $hash
}
foreach ($name in $names){
$name
$source = "$uri"+$name
$source
$target = '\\server\folder\subfolder\sub\sub2\'+$name
$target
$wc = new-object system.net.webclient
$uri2 = new-object system.uri($source)
#Download file from FTP server
Try{
#$wc.Credentials = new-object System.Net.NetworkCredential($userid, $password)
$wc.downloadfile($uri2, $target)
}
Catch [Net.WebException]{
$_|fl * -Force
}
#Delete files from FTP server after download
$request = [system.Net.FtpWebRequest]::Create($uri2)
$request.Method = [System.Net.WebRequestMethods+FTP]::DeleteFile
$response = $request.GetResponse()
"Deleted from FTP: $source" -f $response.StatusDescription
$response.Close()
}
}
}
Get-FTPFiles
Thanks for the help.