Azure Cross-platform Command line tools を使いながらBlobまるごとコピーする PowerShell スクリプト

# ================================================================
# 設定
# ================================================================
# 転送元
$srcacct=”AzureStorageアカウント名”
$srckey=”アクセスキー”

# 転送先
$destacct=”AzureStorageアカウント名”
$destkey=”アクセスキー”

# 転送したくないコンテナ名を列挙しとく
$nontransfercontainers = “automated-sql-export”, “backups”, “mydeployments”, “vsdeploy”, “wad-control-container”, “wad-iis-logfiles”

# コマンドラインへのパス
$azure=”C:\Program Files (x86)\Microsoft SDKs\Windows Azure\CLI\wbin\azure.cmd”
$azcopy=”C:\Program Files (x86)\Microsoft SDKs\Windows Azure\AzCopy\AzCopy.exe”

# ================================================================
# 実行
# ================================================================
$srccontainersjsonstr = & $azure storage container list –json -a $srcacct -k $srckey
$srccontainers = “{ root: ” + $srccontainersjsonstr + ” }” | ConvertFrom-Json |  Select-Object -ExpandProperty root

$srccontainersjsonstr

$destcontainersjsonstr = & $azure storage container list –json -a $destacct -k $destkey
$destcontainerslist = “{ root: ” + $destcontainersjsonstr + ” }” | ConvertFrom-Json | Select-Object -ExpandProperty root | Select-Object -ExpandProperty name

foreach ($item in $srccontainers) {
  $targetcontainer = $item.name

  if ($nontransfercontainers.Contains($targetcontainer)) { continue }

  if ($destcontainerslist.Contains($targetcontainer)) {
    # $targetcontainer + ” –permission ” + $item.publicAccessLevel
    # & $azure storage container set $targetcontainer -a $destacct -k $destkey -p $item.publicAccessLevel
  } else {
    & $azure storage container create $targetcontainer -a $destacct -k $destkey -p $item.publicAccessLevel
    # “CONTAINER is created : ” + $targetcontainer
  }

  $srcurl  = “https://” + $srcacct + “.blob.core.windows.net/” + $targetcontainer
  $desturl = “https://” + $destacct + “.blob.core.windows.net/” + $targetcontainer
  # /S : 再帰的
  # /XO : 古いファイルは更新しない
  # /L : 実行しないでリストだけ
  “COPY ” + $srcurl + ” to ” + $desturl
  & $azcopy $srcurl $desturl /Y /V /S /XO /SourceKey:$srcKey /DestKey:$destkey
}

 


Windows Azure Cross-platform Command Line Tools を入れたら Blobへのアクセスキーだけでコンテナを作ることができるし、 Azcopy もついてきていた。
とはいえ、スクリプト全体は PowerShell を使って JSON 経由でいろいろやってみた。

azure storage container list コマンドの結果は [ … ] というJSONの配列形式だったのだが、 ConvertFrom-Json cmdlet は直接この形式を扱えないため、1オブジェクトになるよう文字列を結合してから Select-Object –ExpandProperty を使ってリストに戻してあげている。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。