The Will Will Web | 如何在 Azure Lab Services 中批次啟動與停止實驗室中所有虛擬機器 (VMs)

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Azure Lab Services 中批次啟動與停止實驗室中所有虛擬機器 (VMs)

最近因為企業內訓的授課需求,需要在 Azure 上建立 20 台客製化環境的虛擬機器(VMs),這個時候正是使用 Azure Lab Services 的最佳時機 (以前的名稱叫做 Azure DevTest Labs 實驗室服務)。由於透過 Azure Lab Services 建立的 VMs 可以設定每天定時自動關機、自動開機,用以節省 Azure 的花費,這是一個非常貼心的設計。不過,客戶這邊的課程並不是每天上課,而是每周上課一次,這個設定就不太好用了。本篇文章我來分享剛寫好的兩份 Azure PowerShell 指令檔,方便日後批次啟動或停止這些實驗室中的虛擬機器。

批次啟動特定 Lab 下所有 VMs

# 批次啟動特定 Lab 下所有 VMs

# 使用前請先變更以下參數:
$subscriptionId = "<請輸入訂用帳戶名稱ID>"
$labResourceGroup = "<請輸入資源群組名稱>"
$labName = "<請輸入Lab的資源名稱>"

# 第一次執行時,才需要執行登入動作
Connect-AzureRmAccount

# 選取訂用帳戶
Select-AzureRmSubscription -SubscriptionId $subscriptionId

# 取得這個 Lab 的資源物件
$lab = Get-AzureRmResource -ResourceId ('subscriptions/' + $subscriptionId + '/resourceGroups/' + $labResourceGroup + '/providers/Microsoft.DevTestLab/labs/' + $labName)

# 取得這個 Lab 下的所有 VMs
$labVMs = Get-AzureRmResource | Where-Object {
          $_.ResourceType -eq 'microsoft.devtestlab/labs/virtualmachines' -and
          $_.Name -like "$($lab.Name)/*"}

# 啟動所有 VMs
foreach($labVM in $labVMs)
{
    Invoke-AzureRmResourceAction -ResourceId $labVM.ResourceId -Action Start -Force
}

批次停止特定 Lab 下所有 VMs

# 批次停止特定 Lab 下所有 VMs

# 使用前請先變更以下參數:
$subscriptionId = "<請輸入訂用帳戶名稱ID>"
$labResourceGroup = "<請輸入資源群組名稱>"
$labName = "<請輸入Lab的資源名稱>"

# 第一次執行時,才需要執行登入動作
Connect-AzureRmAccount

# 選取訂用帳戶
Select-AzureRmSubscription -SubscriptionId $subscriptionId

# 取得這個 Lab 的資源物件
$lab = Get-AzureRmResource -ResourceId ('subscriptions/' + $subscriptionId + '/resourceGroups/' + $labResourceGroup + '/providers/Microsoft.DevTestLab/labs/' + $labName)

# 取得這個 Lab 下的所有 VMs
$labVMs = Get-AzureRmResource | Where-Object {
          $_.ResourceType -eq 'microsoft.devtestlab/labs/virtualmachines' -and
          $_.Name -like "$($lab.Name)/*"}

# 停止所有 VMs
foreach($labVM in $labVMs)
{
    Invoke-AzureRmResourceAction -ResourceId $labVM.ResourceId -Action Stop -Force
}

批次刪除特定 Lab 下所有 VMs

# 批次刪除特定 Lab 下所有 VMs

# 使用前請先變更以下參數:
$subscriptionId = "<請輸入訂用帳戶名稱ID>"
$labResourceGroup = "<請輸入資源群組名稱>"
$labName = "<請輸入Lab的資源名稱>"

# 第一次執行時,才需要執行登入動作
Connect-AzureRmAccount

# 選取訂用帳戶
Select-AzureRmSubscription -SubscriptionId $subscriptionId

# 取得這個 Lab 的資源物件
$lab = Get-AzureRmResource -ResourceId ('subscriptions/' + $subscriptionId + '/resourceGroups/' + $labResourceGroup + '/providers/Microsoft.DevTestLab/labs/' + $labName)

# 取得這個 Lab 下的所有 VMs
$labVMs = Get-AzureRmResource | Where-Object {
          $_.ResourceType -eq 'microsoft.devtestlab/labs/virtualmachines' -and
          $_.Name -like "$($lab.Name)/*"}

# 刪除所有 VMs
foreach($labVM in $labVMs)
{
    Remove-AzureRmResource -ResourceId $labVM.ResourceId -Force
}

相關連結