Sau một số thử nghiệm, tôi đã tìm ra cách này để tự động tải xuống FTP an toàn trong PowerShell. Tập lệnh này chạy khỏi số public test FTP server do Chilkat Software quản lý. Vì vậy, bạn có thể sao chép và dán mã này và nó sẽ chạy mà không cần sửa đổi.
$sourceuri = "ftp://ftp.secureftp-test.com/hamlet.zip"
$targetpath = "C:\hamlet.zip"
$username = "test"
$password = "test"
# Create a FTPWebRequest object to handle the connection to the ftp server
$ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)
# set the request's network credentials for an authenticated connection
$ftprequest.Credentials =
New-Object System.Net.NetworkCredential($username,$password)
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false
# send the ftp request to the server
$ftpresponse = $ftprequest.GetResponse()
# get a download stream from the server response
$responsestream = $ftpresponse.GetResponseStream()
# create the target file on the local system and the download buffer
$targetfile = New-Object IO.FileStream ($targetpath,[IO.FileMode]::Create)
[byte[]]$readbuffer = New-Object byte[] 1024
# loop through the download stream and send the data to the target file
do{
$readlength = $responsestream.Read($readbuffer,0,1024)
$targetfile.Write($readbuffer,0,$readlength)
}
while ($readlength -ne 0)
$targetfile.close()
tôi tìm thấy rất nhiều thông tin hữu ích tại những liên kết này
Nếu bạn muốn sử dụng một kết nối SSL bạn cần phải thêm dòng
$ftprequest.EnableSsl = $true
cho tập lệnh trước khi bạn gọi GetResponse(). Đôi khi bạn có thể cần phải đối phó với chứng chỉ bảo mật máy chủ đã hết hạn (như tôi không may làm). Có một trang tại PowerShell Code Repository có một đoạn mã để làm điều đó. 28 dòng đầu tiên phù hợp nhất với mục đích tải xuống tệp.
Nguồn
2008-11-06 14:41:12
đó là một lựa chọn thứ 4 có giá trị mà tôi nên có ý nghĩ. Nếu bạn sẽ biết tên của tập tin trước thời hạn thì đây chắc chắn là một giải pháp tốt và bạn nên chấp nhận nó như là câu trả lời. – EBGreen