FTP复制失败取决于文件的数量和大小

时间:2012-11-01 14:15:20

标签: powershell ftp

我需要在几个ftps上复制几个文件。

我使用this Write-FTP功能。它的各种版本在网上传播和SO。

问题是复制失败取决于文件数和其他语句。这是测试代码:

. ".\Write-FTP.ps1"

$ftp = "ftp://10.35.3.66//var/www/html/"

$files=@()
@(1..151) | %{ $files += "File1.zip"}

ForEach( $file in $files) {
        $file
        Write-Ftp  $file $ftp @("user", "pass")
        #[System.GC]::Collect()
}

在我的系统上,150个文件可以正常工作,但151st会发出错误。如果我取消注释GC.Collect,它会在3个文件后失败。 File1.zip是空的zip文件。这是输出:

---------- PowerShell ----------
File1.zip
File1.zip
File1.zip
Exception calling "GetRequestStream" with "0" argument(s): "The remote server r
eturned an error: (500) Syntax error, command unrecognized."
At D:\Work\ISPPlus\_novi\Write-FTP.ps1:17 char:30
+         $rs = $ftp.GetRequestStream <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

根据文件的大小和数量发生错误。它看起来像是一些内存问题,但我找不到什么错误。

1 个答案:

答案 0 :(得分:0)

我找到了answer

在上述测试文件的特定情况下,通过的是提前创建凭证对象:

$cr = New-Object System.Net.NetworkCredential("aplikacija", "aplikacija")
ForEach( $file in $files) {
        $file
        Write-Ftp $file $ftp $cr
}

将FtpWebRequest的KeepAlive选项设置为false也有效。