Как я могу выполнить загрузку HTTP PUT на сервер VMware ESX в PowerShell?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Предполагается, что VMware ESX, ESXi и VirtualCenter смогут поддерживать загрузку HTTP PUT, начиная с версии 3.5.Я знаю, как делать загрузки, это легко.Я никогда раньше не делал PUT.

Справочная информация по теме здесь: http://communities.vmware.com/thread/117504

Это было полезно?

Решение

в Расширения VI Toolkit используйте Copy-TkeDatastoreFile.Он будет работать с двоичными файлами.

Другие советы

Вам следует взглянуть на Send-PoshCode функционировать в PoshCode модуль сценария командлетов...он использует POST, а не PUT, но метод практически идентичен.У меня нет PUT-сервера, который я мог бы использовать для тестирования, но в основном установите свой $url и свои $data и сделайте что-то вроде:

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top