Powershell System.Management.Automation.MethodInvocationException

715 Views Asked by At

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?

0

There are 0 best solutions below