PowerShell から 全AzureVMを割り当て解除済みで停止する

先日行われたJAZUG青森の第1回勉強会で初めてMicrosoft Azureの仮想マシンに触りました。
非常に面白いものの、お約束の「仮想マシンを停止忘れによる課金問題」が付きまといます。
そこで、PowerShellから稼働中の全AzureVMを一度に「停止済み (割り当て解除済み)」にするスクリプトを書いてみました。
流石に常時稼働している場合には使えませんが、たまに起動して停止するような使い方であれば使えるのかなと思っています。

全AzureVMを割り当て解除済みで停止するスクリプト

Get-AzureVM コマンドレットで仮想マシンの一覧を読み込み、ステータスがReadyRoleのもののみ強制的に停止させます。
Get-AzureVM | Where-Object{$_.Status -eq "ReadyRole"} | Stop-AzureVM -Force

停止済みの全AzureVMを一度に起動するスクリプト

反対に全起動する場合は、最後をStart-AzureVM コマンドレットに変えます。
Get-AzureVM | Where-Object{$_.Status -eq "StoppedDeallocated"} | Start-AzureVM

仮想マシン数が多い場合は、Jobにポイ

仮想マシン数が多い場合、スクリプトが完了するまで時間がかかるようなので、バックグランドで処理させると便利かも。
  • Start-Job コマンドレット
    Start-Job{Get-AzureVM | Where-Object{$_.Status -eq "ReadyRole"} | Stop-AzureVM -Force}
  • Get-Job コマンドレット
  • Receive-Job コマンドレット
    Receive-Job –Id <x> –Wait
  • Remove-Job コマンドレット
    Remove-Job –Status Completed
余談:Azure PowerShellを利用する手順
  1. Web Platform Installerをダウンロード、インストールする
    Microsoft Web Platform Installer
  2. 管理者権限でPowerShell を起動
    ※今回はAzure PowerShell を使いません
  3. モジュールをインポート
    >Import-Module Azure
  4. Add-AzureAccount コマンドレットを実行、認証処理をする
認証処理で困った事が一つ
Azure サービスはMicrosoft アカウントに紐づけており、Microsoft アカウントは二段階認証を設定しています。


Android アプリ「Microsoft アカウント(二段階認証アプリ)※」で要求処理を受信し許可するも失敗。
「セキュリティ コード」に切り替える事で無事認証が完了しました。
※バージョンは1.0.0067.1005
アプリ側の問題なのかどうかはまだ分かっていません。

Android アプリ「Microsoft アカウント」の概要と使い方を知りたい方は下の記事をご覧ください。
Android用 2段階認証アプリ「Microsoft アカウント」とAzure 用多要素認証アプリ「Multi-Factor Authentication」
スポンサーリンク

スポンサーリンク