使用Powershell Invoke-RestMethod下载大文件?

时间:2016-06-06 04:57:46

标签: json powershell post

为了从特定站点自动下载文件,该站点要求我将REST Web服务传递给JSON对象中包含的一些信息。为了做到这一点,我构建了一个哈希表,将其转换为JSON,然后将其添加到Invoke-WebRequest的主体。

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

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

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

然而,使用这种方法,相当大的文件永远不会完全下载。只下载了大约一半。据我所知,Powershell将响应对象完全加载到内存中,最后将其转储到指定的本地输出路径。这导致我寻找更好的方法,但我很难过。

在做了一些研究之后,似乎使用System.Net.WebClient最适合这个,因为它在整个下载过程中缓冲了对磁盘的响应。但是,我完全不知道如何使用此方法传递JSON对象。这可能吗?我是不是走错了路?

1 个答案:

答案 0 :(得分: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)

再次,只是在黑暗中拍摄。