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 に答える