我正在嘗試使用 PowerShell 上傳一個(長)排隊檔案串列,使用System.Net.WebClient該UploadFile函式。這作業正常,但在我們上傳檔案后,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,所以切換到另一種協議不是一種選擇。)
uj5u.com熱心網友回復:
對于遇到此問題的任何其他人,解決方案是使用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://www.uj5u.com/qiye/358642.html
