배경 : PowerShell 내에서 FTP를 통해 원격 디렉터리 정보를 검색하기 위해 다양한 기술을 사용합니다.PowerShell 스크립트에서 FTP ListDirectoryDetails 스트림 읽기를 얼마나 지연시킬 수 있습니까?
아래 스크립트는 PowerShell에서 사용할 수있는 '기성품'FTP ListDirectailsDetails를 사용하여 원격 디렉터리 세부 정보를 검색하는 보편적 인 방법 인 것으로 보입니다. (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 배로 떨어 뜨 렸고, 10 배의 향상을 보였다. 그러나 이런 일에있어서 전문가가 아니기 때문에 나는 그 지연의 필요성이나 지연이 충분하지 않은 것에 대한 결과를 정말로 이해하지 못한다.
누군가 우리가 여기서 다루고있는 메커니즘을 설명 할 수 있습니까?
와우, 나는 이전 게시물에서 무슨 일이 벌어지고 있었는지 알지 못했고 더 가까이서 연구해야했습니다. 그러한 것이 우리가 때때로 취하는 길입니다. 그 점을 지적 해 주셔서 감사합니다. 이전 교류 중 하나에 대해 의견을 말했기 때문에, 나는이 상황을 완전히 이해할 수 있도록이 단계를 단계적으로 진행하고 있습니다. WinSCP에서 끝나기를 전적으로 기대하지만, 단계별로 단계별로 나갈 것입니다. 위와 다른 게시물을 더 자세히 살펴보고 ListDirectoryDetails에 대한 스크립트 테스트를 다시 실행합니다. 언급 된 코드에서 지연이 발생하는지 확인해 주셔서 감사합니다. – Alan
후속 조치. 마침내 위의 샘플과 언급 한 다른 링크를 사용하여 전체 스크립트를 코딩 할 수있었습니다. 당신은 큰 도움이되었습니다. 이제 ListDirectoryDetails가 완전히 작동하는 것을 보았습니다. WinSCPnet.dll이 PowerShell 스크립트인지 또는 다른 컴파일 된 모듈인지 묻고 싶습니다. ListDirectoryDetails보다 디렉토리 데이터를 훨씬 빨리 검색합니까? – Alan
@Alan'WinSCPnet.dll'은'winscp.exe' 스크립트 인터페이스를 실행하는 C# 어셈블리입니다. https://winscp.net/eng/docs/library#purpose를 참조하십시오 - 아니요, WinSCP가 'FtpWebRequest'보다 훨씬 빠르다고 생각하지 않습니다. 두 가지 모두 동일하기 때문에. –