PowerShell System.Net.WebClient 从不关闭 ftp 连接

PowerShell System.Net.WebClient never closes ftp connection

我正在尝试使用 PowerShell 上传(长)排队文件列表,使用 System.Net.WebClientUploadFile 函数。这工作正常,但在我们上传文件后,ftp-连接永远不会关闭,无论是在 WebClient 对象实例超出范围时,还是在脚本完成后。该函数如下所示:

function Upload-File() {
    Param (
        [string] $user,
        [string] $password,
        [string] $srceFileName,
        [string] $destFileName
    )
    # Set up FTP-client
    $client = New-Object System.Net.WebClient
    $client.Credentials = New-Object System.Net.NetworkCredential($user, $password)
    $client.UploadFile($destFileName, ".$srceFileName")
    $client.Dispose()
}

我能找到的所有信息都表明当 $client 超出范围时连接应该自动关闭,但这显然没有发生。

知道如何强制关闭连接吗?

(这是遗留系统的一部分,现在我坚持使用 ftp,因此无法切换到另一个协议。)

对于其他 运行 遇到此问题的人,解决方案是使用 FtpWebRequest 而不是 WebClient 并设置 KeepAlive = $false。下面的函数将上传然后立即终止连接。

function Upload-File() {
    Param (
        [string] $user,
        [string] $password,
        [string] $srceFileName,
        [string] $destFileName
    )
    $request = [Net.WebRequest]::Create($destFileName)
    $request.KeepAlive = $false
    $request.Credentials =
        New-Object System.Net.NetworkCredential($user, $password)
    $request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile 
    
    $fileStream = [System.IO.File]::OpenRead(".$srceFileName")
    $ftpStream = $request.GetRequestStream()
    $fileStream.CopyTo($ftpStream)
    
    $ftpStream.Dispose()
    $fileStream.Dispose()
}

This post pointed me in the right direction.