📙
複数台のAzureVMを起動停止するPowerShellコマンド
はじめに
Azureのコンソールでは、複数のVMをチェックして起動停止を行うことができます。
ですが数十台のVMから定期的に特定の数台のVMを操作する場合、チェックボックスの選択ミスのリスクが生じます。タグなどでフィルターできればよいのですが、VMに綺麗にタグ付けされていないこともあるかと思います。
そのため起動するVMを変数で定義して、コマンドで行う方法を記事にしました。
概要
- 複数のAzureVMを一度に起動、停止できるコマンド
- CloudShellで実行する想定
- いずれかのサブスクリプションを操作できる権限があれば、CloudShellは動かせるようです
- コマンドの先頭で、起動停止と対象のVMを指定
- 同じサブスクリプションにあるVMが前提
- 別のサブスクリプションを操作する際は、
Set-AzContext -SubscriptionIdで変更します
- 別のサブスクリプションを操作する際は、
コマンド
以下のコマンドをコピペするだけでOKです。
# 1. 実行したい操作を指定
$Action = "Stop"
# $Action = "Start"
# 2. 操作対象のVMリストを定義
$VMList = @(
@{Name="vm-a"; ResourceGroup="ss-a"},
@{Name="vm-b"; ResourceGroup="ss-b"}
)
Write-Host "--- $($VMList.Count) 台のVMに対して操作を実行します ---" -ForegroundColor Cyan
foreach ($VM in $VMList) {
$VMName = $VM.Name
$RGName = $VM.ResourceGroup
Write-Host "[$RGName/$VMName] に $Action を実行中..."
try {
if ($Action -eq "Start") {
# VMを起動します。
Start-AzVM -ResourceGroupName $RGName -Name $VMName -AsJob | Out-Null
} elseif ($Action -eq "Stop") {
# VMを停止 (割り当て解除) します。
Stop-AzVM -ResourceGroupName $RGName -Name $VMName -Force -AsJob | Out-Null
} else {
Write-Error "無効なアクションが指定されました: $Action。 'Start' または 'Stop' を使用してください。"
break
}
} catch {
# エラーが発生した場合も、次のVMの処理を続行します
Write-Error "[$RGName/$VMName] の操作中にエラーが発生しました: $($_.Exception.Message)"
}
}
Write-Host "--- 全ての操作要求を送信しました ---" -ForegroundColor Cyan
起動のコマンドの場合は、以下のような結果になります。
PS /home/usera> # 1. 実行したい操作を指定
PS /home/usera> # $Action = "Stop"
PS /home/usera> $Action = "Start"
PS /home/usera>
PS /home/usera> # 2. 操作対象のVMリストを定義
PS /home/usera> $VMList = @(
>> @{Name="vm-a"; ResourceGroup="ss-a"},
>> @{Name="vm-b"; ResourceGroup="ss-b"}
>> )
PS /home/usera>
PS /home/usera> Write-Host "--- $($VMList.Count) 台のVMに対して操作を実行します ---" -ForegroundColor Cyan
--- 2 台のVMに対して操作を実行します ---
PS /home/usera>
PS /home/usera> foreach ($VM in $VMList) {
>> $VMName = $VM.Name
>> $RGName = $VM.ResourceGroup
>>
>> Write-Host "[$RGName/$VMName] に $Action を実行中..."
>>
>> try {
>> if ($Action -eq "Start") {
>> # VMを起動します。
>> Start-AzVM -ResourceGroupName $RGName -Name $VMName -AsJob | Out-Null
>> } elseif ($Action -eq "Stop") {
>> # VMを停止 (割り当て解除) します。
>> Stop-AzVM -ResourceGroupName $RGName -Name $VMName -Force -AsJob | Out-Null
>> } else {
>> Write-Error "無効なアクションが指定されました: $Action。 'Start' または 'Stop' を使用してください。"
>> break
>> }
>> } catch {
>> # エラーが発生した場合も、次のVMの処理を続行します
>> Write-Error "[$RGName/$VMName] の操作中にエラーが発生しました: $($_.Exception.Message)"
>> }
>> }
[ss-a/vm-a] に Start を実行中...
[ss-b/vm-b] に Start を実行中...
PS /home/usera>
PS /home/usera> Write-Host "--- 全ての操作要求を送信しました ---" -ForegroundColor Cyan
--- 全ての操作要求を送信しました ---
おわりに
今回は複数のAzureVMを起動停止するコマンドを記事にしました。
綺麗に整理できていない環境ではGUIでの操作は危険のため、コマンドを作ってみました。
この記事がどなたかのお役に立ちましたら幸いです。
Discussion