我尝试使用System.Net.WebClient和UploadFile函数,使用PowerShell上传一个(长)队列文件列表。这可以很好地工作,但是在我们上传文件之后,ftp-connection永远不会关闭,无论是当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,因此不能切换到另一种协议。)
发布于 2021-11-14 20:26:45
对于遇到此问题的任何其他人,解决方案是使用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()
}https://stackoverflow.com/questions/69964697
复制相似问题