【发布时间】:2017-12-01 16:22:06
【问题描述】:
背景:通过不同的技术在 PowerShell 中通过 FTP 检索远程目录信息。
下面的脚本似乎是一种使用 PowerShell 中可用的“现成”FTP ListDirectoryDetails 检索远程目录详细信息的流行方式。 (link1、link2、link3)而且效果很好。
$server = "ftp://servername"
$ftp = [system.net.ftpwebrequest] [system.net.webrequest]::create($server)
$ftp.method = [system.net.WebRequestMethods+ftp]::listdirectorydetails
$response = $ftp.getresponse()
$stream = $response.getresponsestream()
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding
$outputBuffer = ""
$foundMore = $false
## Read all the data available from the stream, writing it to the
## output buffer when done.
do
{
## Allow data to buffer for a bit
start-sleep -m 1000
## Read what data is available
$foundmore = $false
$stream.ReadTimeout = 1000
do
{
try
{
$read = $stream.Read($buffer, 0, 1024)
if($read -gt 0)
{
$foundmore = $true
$outputBuffer += ($encoding.GetString($buffer, 0, $read))
}
} catch { $foundMore = $false; $read = 0 }
} while($read -gt 0)
} while($foundmore)
$outputBuffer
do loop 启动时,会设置一个延迟。检索多个文件夹时,延迟乘以文件夹数。所以延迟越短,下载速度越快。我把它降到 100,提高了十倍,而且效果很好。但我不是这些事情的专家,我并不真正了解延迟的必要性,也不了解延迟不足的后果。
有人能解释一下我们在这里处理的机制吗?
【问题讨论】:
标签: powershell ftp ftpwebrequest