Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ParallelRMRGVirtualMachines
param(
[string]$power,
[string]$azureResourceGroup
)
if (!$power){Write-host "No powerstate specified. Use -Power start|stop"}
if (!$azureResourceGroup){Write-host "No Azure Resource Group specified. Use -azureResourceGroup 'ResourceGroupName'"}
# see if we already have a session. If we don't don't re-authN
if (!$AzureRMAccount.Context.Tenant) {
$AzureRMAccount = Add-AzureRmAccount
}
$SubscriptionName = Get-AzureRmSubscription | sort SubscriptionName | Select SubscriptionName
$TenantId = $AzureRMAccount.Context.Tenant.TenantId
Select-AzureRmSubscription -TenantId $TenantId
write-host "Enumerating VM's from AzureRM in Resource Group '"$azureResourceGroup "'"
$vms = Get-AzureRMVM -ResourceGroupName $azureResourceGroup
$vmrunninglist = @()
$vmstoppedlist = @()
Foreach($vm in $vms)
{
$vmstatus = Get-AzureRMVM -ResourceGroupName $azureResourceGroup -name $vm.name -Status
$PowerState = (get-culture).TextInfo.ToTitleCase(($vmstatus.statuses)[1].code.split("/")[1])
write-host "VM: '"$vm.Name"' is" $PowerState
if ($Powerstate -eq 'Running')
{
$vmrunninglist = $vmrunninglist + $vm.name
}
if ($Powerstate -eq 'Deallocated')
{
$vmstoppedlist = $vmstoppedlist + $vm.name
}
}
if ($power -eq 'start') {
write-host "Starting VM's "$vmstoppedlist " in Resource Group "$azureResourceGroup
$vmstoppedlist | Invoke-Parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock {
Start-AzureRMVM -ResourceGroupName $azureResourceGroup -Name $_ -Verbose }
}
if ($power -eq 'stop') {
write-host "Stopping VM's "$vmrunninglist " in Resource Group "$azureResourceGroup
$vmrunninglist | Invoke-Parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock {
Stop-AzureRMVM -ResourceGroupName $azureResourceGroup -Name $_ -Verbose -Force }
}
@gulabpasha

This comment has been minimized.

Copy link

commented Nov 17, 2016

Hi,

I hope I'm writing on to a right thread, I tried the above script to Start / Stop Multiple VM Simultaneously but wasn't succeeded.

I have multiple Resource Groups (20+) and each Resource Group has VMs running, I was looking PS script where I can use to turn those all VMs on & off in single go (Simultaneously).

I have a PS script running where it start & stops one after one for all Resource Groups.

I'm looking for a solution where I can turn on & off all VMs in one Subscription or Tenant simultaneously.

Thanks,
Gulab Pasha

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.