-
Notifications
You must be signed in to change notification settings - Fork 1
/
start-vms.ps1
97 lines (78 loc) · 2.86 KB
/
start-vms.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<#
.SYNOPSIS
Connects to Azure and starts all VMs / VM Scale Sets in the specified resource group
.PARAMETER ResourceGroupName
Required
The resource group containing the VMs VM Scale Sets to stop.
.NOTES
Based on the original "Stop Azure V2 VMs" script by
AUTHOR: System Center Automation Team
LASTEDIT: January 7, 2016
#>
param (
# [Parameter(Mandatory=$false)]
# [String] $AzureCredentialAssetName = 'AzureCredential',
# [Parameter(Mandatory=$false)]
# [String] $AzureSubscriptionIdAssetName = 'AzureSubscriptionId'
[Parameter(Mandatory=$true)]
[String] $ResourceGroupName
)
# Returns strings with status messages
[OutputType([String])]
$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
"Logging into Azure..."
$null = Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint `
-ErrorAction Stop `
-ErrorVariable err
if($err) {
throw $err
}
function CheckStatus($status) {
foreach ($VMStatus in $status) {
if($VMStatus.Code -like "PowerState/*") {
return $VMStatus.DisplayStatus
}
}
}
$ResourceGroupNames = @($ResourceGroupName)
foreach ($RG in $ResourceGroupNames) {
# Find all the scale set VMs
$ScaleSets = Get-AzureRmVmss -ResourceGroupName $RG
foreach($SS in $ScaleSets) {
Write-Output ("Starting scale set: " + $ss.Name)
Start-AzureRmVmss -ResourceGroupName $RG -VMScaleSetName $ss.Name
}
$VMs = Get-AzureRmVM -ResourceGroupName $RG
# Start each of the VMs
foreach ($VM in $VMs) {
$VMDetail = $VM | Get-AzureRmVM -Status
foreach ($VMStatus in $VMDetail.Statuses) {
if($VMStatus.Code -like "PowerState/*") {
$VMStatusDetail = $VMStatus.DisplayStatus
}
}
Write-Output ("Current VM: " + $VM.Name);
Write-Output ($VM.Name + " status is '" + $VMStatusDetail + "'");
if ($VMStatusDetail -eq "VM Running") {
Write-Output ("Not attempting to start " + $VM.Name + " as it's aleady running.")
}
else {
$StartRtn = $VM | Start-AzureRmVM -Force -ErrorAction Continue
if ($StartRtn.IsSuccessStatusCode -ne $True) {
# The VM failed to start, so send notice
Write-Output ($VM.Name + " failed to start")
Write-Error ($VM.Name + " failed to start. Error was:") -ErrorAction Continue
Write-Error ($StartRtn.ReasonPhrase) -ErrorAction Continue
}
else {
# The VM started, so send notice
Write-Output ($VM.Name + " has been started")
}
}
}
}