Reputation: 113
I have a small Problem.
I try to download files from an FTP Server with Powershell and store them on a Cifs share
My Code looks like this (First I get a List of all files on the FTP and then I use the names to download it over the file stream)
$savedir_GA = '\\test21\test_data$\AG\100_Bereich TECHNIK - ELE_WA_WAE\130_Planung\010 AV Daten\04_Gro\'
$savedir_KA = "\\test21\test_data$\AG\100_Bereich TECHNIK - ELE_WA_WAE\130_Planung\010 AV Daten\03_Kap\"
$ftp = "ftp://ftp.test-swiss.ch"
$credentials =New-Object System.Net.NetworkCredential("test","test" )
$remotePickupDir = "/Planung/RSW/DXF_Export/AV/"
$ftpuri = $ftp + $remotePickupDir
$uri=[system.URI] $ftpuri
$ftprequest=[system.net.ftpwebrequest]::Create($uri)
$ftprequest.Credentials=$credentials
$ftprequest.Method=[system.net.WebRequestMethods+ftp]::ListDirectory
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false
$response = [System.Net.FtpWebResponse]$ftprequest.GetResponse()
[System.IO.Stream]$stream = $response.GetResponseStream()
$reader = new-object System.IO.StreamReader($stream)
$list = $reader.ReadToEnd() -split "`n"
$reader.Close()
$response.Close();
$stream.Close();
foreach ($line in $list)
{
Write-Host $line
$ftpuri = $ftp + $remotePickupDir + $line
$uri=[system.URI] $ftpuri
$ftprequest=[system.net.ftpwebrequest]::Create($uri)
$ftprequest.Credentials=$credentials
$ftprequest.Method=[system.net.WebRequestMethods+ftp]::DownloadFile
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false
$response=[System.Net.FtpWebResponse]$ftprequest.GetResponse()
[System.IO.Stream]$strm = $response.GetResponseStream()
$response.Close();
Write-Host $response
try
{
if($line -like "TestFile1*")
{
$path = $savedir_GA + $line
Write-Host $path
$targetfile = New-Object IO.FileStream ($path,[IO.FileMode]::Create)
Write-Host $targetfile
}
ElseIf($line -like "testdok2*")
{
$targetfile = New-Object IO.FileStream ($savedir_KA+$line ,[IO.FileMode]::Create)
Write-Host $targetfile
}
if($strm -ne $null)
{
Write-Host "readbuffer"
[byte[]]$readbuffer = New-Object byte[] 1024
do
{
Write-Host "Read strm"
$readlength = $strm.Read($readbuffer,0,1024)
Write-Host "Write Target"
$targetfile.Write($readbuffer,0,$readlength)
}
while ($readlength -ne 0)
}
Write-Host $line
$strm.Close()
$targetfile.Close()
$ftprequest.Close()
}
catch
{
$_|fl * -Force
}
}
But my Problem is, I get the following Exception
PSMessageDetails :
Exception : System.Management.Automation.MethodInvocationException: Exception calling ".ctor" with "2" argument(s): "Illegal characters in path." --->
System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)
at System.IO.Path.GetFileName(String path)
at System.IO.FileStream..ctor(String path, FileMode mode)
--- End of inner exception stack trace ---
at System.Management.Automation.DotNetAdapter.AuxiliaryConstructorInvoke(MethodInformation methodInformation, Object[] arguments,
Object[] originalArguments)
at System.Management.Automation.DotNetAdapter.InvokeResolvedConstructor(MethodInformation bestMethod, Object[] newArguments, Object[]
arguments)
at System.Management.Automation.DotNetAdapter.ConstructorInvokeDotNet(Type type, ConstructorInfo[] constructors, Object[] arguments)
at Microsoft.PowerShell.Commands.NewObjectCommand.CallConstructor(Type type, ConstructorInfo[] constructors, Object[] args)
First I thought the problem exist because of the spaces in the path which is used to store the file. In that case, I added ' before every space, but it didn't worked.
Do I overlook something?
Upvotes: 0
Views: 908