So I came up with this script that allows me to shut down the VMs without having to go to the portal. Please note: so there is a subscription for DEV/TEST and one for PROD. Furthermore, I'm not shutting down the domain controllers ( macine name ends with AD01 ).
$OTASubscription = "SomeSubscriptionName" $PRODSubscription = "AnotherSubscriptionName" Function PromptForAzureLogin { $title = "Log in to Azure first?" $message = "Do you want to log in to Azure and install a management certificate ?" $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) $result = $host.ui.PromptForChoice($title, $message, $options, 1) switch ($result) { 0 { # This will cause a login screen to appear which lets you login Add-AzureAccount # Displays a list of subscriptions Get-AzureSubscription } 1 { # Do nothing } } } Function SelectSubscription { $title = "Select subscription" $message = "Please select AzureSubscription" $ota = New-Object System.Management.Automation.Host.ChoiceDescription "&OTA", "OTA" $prod = New-Object System.Management.Automation.Host.ChoiceDescription "&PROD", "PRODUCTION $options = [System.Management.Automation.Host.ChoiceDescription[]]($ota, $prod) $result = $host.ui.PromptForChoice($title, $message, $options, 0) switch ($result) { 0 { Select-AzureSubscription $OTASubscription -Current Write-Host "OTA Subscription selected" -foregroundcolor green } 1 { Select-AzureSubscription $PRODSubscription -Current Write-Host "PRODUCTION Subscription selected" -foregroundcolor green } } } Function PromptForStartStop { $title = "Start or Stop environment?" $message = "Do you want to start or stop the VMs? (All except -AD01)" $start = New-Object System.Management.Automation.Host.ChoiceDescription "&Start", "Start" $stop = New-Object System.Management.Automation.Host.ChoiceDescription "S&top", "Stop" $cancel = New-Object System.Management.Automation.Host.ChoiceDescription "&Cancel", "Do nothing" $options = [System.Management.Automation.Host.ChoiceDescription[]]($start, $stop, $cancel) $result = $host.ui.PromptForChoice($title, $message, $options, 0) $vmsToStop = Get-AzureVM | where {$_.Name -notlike "*AD01" } switch ($result) { 0 { # Starting VMs for($i = 0; $i -le $vmsToStop.count -1; $i++) { $tuple = $vmsToStop[$i] Write-Host "Starting box named: " $tuple.Name -foregroundcolor green Write-Progress -Activity "Starting VM" -status $tuple.Name -percentComplete ($i / $vmsToStop.count*100) Start-AzureVM -ServiceName $tuple.ServiceName -Name $tuple.Name } } 1 { for($i = 0; $i -le $vmsToStop.count -1; $i++) { $tuple = $vmsToStop[$i] Write-Host "Stopping box named: " $tuple.Name -foregroundcolor green Write-Progress -Activity "Stopping VM" -status $tuple.Name -percentComplete ($i / $vmsToStop.count*100) Stop-AzureVM -ServiceName $tuple.ServiceName -Name $tuple.Name -StayProvisioned } } 2 { # Do nothing Write-Host "Doing nothing ..." -foregroundcolor green } } } cls PromptForAzureLogin SelectSubscription Write-Host "Here are the boxes in the current subscription:" -foregroundcolor green Get-AzureVM PromptForStartStop Write-Host "Here's the situation now:" -foregroundcolor green Get-AzureVM
This comment has been removed by a blog administrator.
ReplyDelete