我需要在几个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
根据文件的大小和数量发生错误。它看起来像是一些内存问题,但我找不到什么错误。
答案 0 :(得分:0)
我找到了answer。
在上述测试文件的特定情况下,通过的是提前创建凭证对象:
$cr = New-Object System.Net.NetworkCredential("aplikacija", "aplikacija")
ForEach( $file in $files) {
$file
Write-Ftp $file $ftp $cr
}
将FtpWebRequest的KeepAlive选项设置为false也有效。