Comment puis-je effectuer des téléchargements PUT HTTP vers un serveur VMware ESX dans PowerShell?

StackOverflow https://stackoverflow.com/questions/65856

  •  09-06-2019
  •  | 
  •  

Question

VMware ESX, ESXi et VirtualCenter sont supposés être capables de prendre en charge les téléchargements HTTP PUT depuis la version 3.5. Je sais comment faire des téléchargements, c'est facile. Je n'ai jamais fait PUT auparavant.

Les informations générales sur le sujet se trouvent ici: http://communities.vmware.com/thread/117504

Était-ce utile?

La solution

Dans les extensions du toolkit VI , utilisez Copy-TkeDatastoreFile. Cela fonctionnera avec les fichiers binaires.

Autres conseils

Vous devriez consulter la fonction Send-PoshCode dans les cmdlets PoshCode . module de script ... il utilise un POST, pas un PUT, mais la technique est pratiquement identique. Je n'ai pas le serveur PUT auquel je puisse penser, mais vous devez définir votre url et vos données, et faire quelque chose comme:

param($url,$data,$filename,[switch]$quiet)

$request = [System.Net.WebRequest]::Create($url)
$data = [Text.Encoding]::UTF8.GetBytes( $data )

## Be careful to set your content type appropriately...
## This is what you're going to SEND THEM
$request.ContentType = 'text/xml;charset="utf-8"' # "application/json"; # "application/x-www-form-urlencoded"; 
## This is what you expect back
$request.Accept = "text/xml" # "application/json";

$request.ContentLength = $data.Length
$request.Method = "PUT"
## If you need Credentials ...
# $request.Credentials = (Get-Credential).GetNetworkCredential()

$put = new-object IO.StreamWriter $request.GetRequestStream()
$put.Write($data,0,$data.Length)
$put.Flush()
$put.Close()

## This is the "simple" way ...
# $reader = new-object IO.StreamReader $request.GetResponse().GetResponseStream() ##,[Text.Encoding]::UTF8
# write-output $reader.ReadToEnd()
# $reader.Close()

## But there's code in PoshCode.psm1 for doing a progress bar, something like ....

$res = $request.GetResponse();
if($res.StatusCode -eq 200) {
   [int]$goal = $res.ContentLength
   $reader = $res.GetResponseStream()
   if($fileName) {
      $writer = new-object System.IO.FileStream $fileName, "Create"
   }

   [byte[]]$buffer = new-object byte[] 4096
   [int]$total = [int]$count = 0
   do
   {
      $count = $reader.Read($buffer, 0, $buffer.Length);
      if($fileName) {
         $writer.Write($buffer, 0, $count);
      } else {
         $output += $encoding.GetString($buffer,0,$count)
      }
      if(!$quiet) {
         $total += $count
         if($goal -gt 0) {
            Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
         } else {
            Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
         }
      }
   } while ($count -gt 0)

   $reader.Close()
   if($fileName) {
       $writer.Flush()
       $writer.Close()
   } else {
       $output
   }
}
$res.Close();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top