2016-06-06 7 views
0

Um den Download einer Datei von einer bestimmten Site zu automatisieren, muss ich auf der Site dem REST-Webdienst einige Informationen übergeben, die in einem JSON-Objekt enthalten sind. Um dies zu tun, baue ich eine Hash-Tabelle, konvertiere sie in JSON und füge sie dann dem Hauptteil von Invoke-WebRequest hinzu.Herunterladen einer großen Datei mit 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 

Allerdings, mit dieser Methode, die ziemlich große Datei verwaltet nie vollständig herunterladen. Nur etwa die Hälfte davon wird heruntergeladen. Soweit ich das beurteilen kann, lädt Powershell das Response-Objekt vollständig in den Speicher, bevor es schließlich an den angegebenen lokalen Ausgabepfad übergeben wird. Das hat mich dazu gebracht, nach einer besseren Methode zu suchen, aber ich habe es sehr schwer.

Nach ein wenig Nachforschungen scheint es, dass die Verwendung von System.Net.WebClient am besten dafür ist, da es die Antwort auf die Festplatte während des Downloads puffert. Jedoch bin ich verloren, genau wie ein JSON-Objekt mit dieser Methode übergeben wird. Ist das möglich? Gehe ich einen völlig falschen Weg?

Antwort

0

Wohlgemerkt ich kann dieses Recht nicht testen ab, aber nur um an example of this in C# suchen ... ein Stich an, es könnte so etwas wie dieses:

$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) 

Wieder nur ein Schuss im Dunkeln.

Verwandte Themen