2008-09-15 7 views
2

VMware ESX、ESXi、およびVirtualCenterは、バージョン3.5以降のHTTP PUTアップロードをサポートすることが想定されています。私はダウンロードを行う方法を知っています、それは簡単です。私は以前はPUTをしたことがありません。PowerShellのVMware ESX ServerへのHTTP PUTアップロードはどのように実行できますか?

トピックに関する背景情報はここにある:あなたがPoshCodeコマンドレットのスクリプトモジュールでSend-PoshCode機能を見ている必要がありhttp://communities.vmware.com/thread/117504

答えて

2

:私はに対してテストすると思うが、基本的に、あなたの$のURLとあなたの$データを設定し、ような何かを行うことができ、サーバーを入れているしないでください。バイナリで動作します。

4

...それはPOST、ないPUTを使用していますが、技術は実質的に同一であります。 VI Toolkit Extensions使用コピーTkeDatastoreFileで

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(); 
+0

バイナリでも動作しますか?それは私の必要条件です – halr9000

関連する問題