2016-06-06 1 views
0

특정 사이트의 파일 다운로드를 자동화하기 위해 사이트에서 JSON 객체에 포함 된 일부 정보를 REST 웹 서비스에 전달해야합니다. 이렇게하기 위해 해시 테이블을 만들어 JSON으로 변환 한 다음 Invoke-WebRequest 본문에 추가합니다.Powershell Invoke-RestMethod로 큰 파일을 다운로드 하시겠습니까?

$hash = @{ logonkey = "$logonkey"; 
     tokenkey = "$tokenkey" 
     fileid = "$fileID" 
     } 

$obj = $hash | convertto-json 
$obj = 'obj=' + $obj 

Invoke-WebRequest '$url' -Method POST -Body $obj -Outfile $localpath 

그러나이 방법을 사용하면 비교적 큰 파일은 완전히 다운로드 할 수 없게됩니다. 약 절반 만 다운로드됩니다. PowerShell은 마지막으로 지정된 로컬 출력 경로로 덤프하기 전에 Response Object를 메모리에 완전히로드합니다. 이로 인해 더 나은 방법을 모색하게되었지만 매우 어려움을 겪고 있습니다.

약간의 연구를 한 후에 다운로드를 통해 디스크에 대한 응답을 버퍼링하므로 System.Net.WebClient를 사용하는 것이 가장 좋습니다. 그러나이 메서드를 사용하여 JSON 객체를 전달하는 방법은 정확히 알 수 없습니다. 이것이 가능한가? 완전히 잘못된 길로 향하고 있습니까?

답변

0

마음 당신은 내가이 권리를 테스트 할 수 없습니다, 그러나 다만 an example of this in C#보고 ... 그것에 찔린는 다음과 같이 수 있습니다 : 어둠 속에서

$hash = @{ logonkey = "$logonkey"; 
     tokenkey = "$tokenkey" 
     fileid = "$fileID" 
     } 

$obj = $hash | convertto-json 
$obj = 'obj=' + $obj 

$request = New-Object System.Net.WebClient 
$request.Headers[HttpRequestHeader.ContentType] = "application/json"; 
$request.UploadString($url,$obj) 

#I would think you could then use the DownloadFile method to pull your file down 
$request.DownloadFile($url,$localpath) 

다시 말하지만, 단지 총.

관련 문제