3

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

我使用这个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 个文件可以工作,但第 151 个文件会出错。如果我取消注释 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

错误的发生取决于文件的大小和数量。它看起来像一些内存问题或其他东西,但我找不到什么问题。

4

1 回答 1

0

我找到了答案

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

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

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

于 2012-11-02T12:49:19.733 回答