Skip to content

Commit a755bec

Browse files
author
Jeff Bowles
committed
updated for newer modules
1 parent db1042d commit a755bec

File tree

2 files changed

+87
-79
lines changed

2 files changed

+87
-79
lines changed

Start-AzureV2VM.ps1

+40-38
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
.DESCRIPTION
77
Uses PowerShell workflow to start all VMs in parallel. Includes a retry and wait cycle to display when VMs are started.
8-
Workflow sessions require Azure authentication into each session so this script uses a splatting of parameters required for Login-AzureRmAccount that
8+
Workflow sessions require Azure authentication into each session so this script uses a splatting of parameters required for Connect-AzureRmAccount that
99
can be passed to each session. Recommend using the New-AzureServicePrincipal script to create the required service principal and associated ApplicationId
1010
and certificate thumbprint required to log into Azure with the -servicePrincipal flag
1111
@@ -89,50 +89,56 @@ $loginParams = @{
8989

9090
$ProgressPreference = 'SilentlyContinue'
9191

92-
if ((Get-Module AzureRM.profile).Version -lt "2.1.0")
93-
{
94-
Write-warning "Old Version of Azure Modules $((Get-Module AzureRM.profile).Version.ToString()) detected. Minimum of 2.1.0 required. Run Update-AzureRM"
92+
import-module AzureRM
93+
94+
if ((Get-Module AzureRM).Version -lt "5.5.0") {
95+
Write-warning "Old version of Azure PowerShell module $((Get-Module AzureRM).Version.ToString()) detected. Minimum of 5.5.0 required. Run Update-Module AzureRM"
9596
BREAK
9697
}
9798

9899
function Start-Vm
99100
{
100101
param($vmName, $resourceGroupName)
101-
102-
$status = ((get-azurermvm -ResourceGroupName $resourceGroupName -Name $vmName -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
103-
if($status -ne 'VM running')
104-
{
105-
Write-Output "Starting $vmName..."
106-
$startRtn = Start-AzureRMVM -Name $VMName -ResourceGroupName $ResourceGroupName -ea SilentlyContinue
107-
$count=1
108-
109-
if($startRtn.Status -ne 'Succeeded')
110-
{
111-
do{
112-
Write-Output "Failed to start $VMName. Retrying in 60 seconds..."
113-
sleep 60
114-
$startRtn = Start-AzureRMVM -Name $VMName -ResourceGroupName $ResourceGroupName -ea SilentlyContinue
115-
$count++
116-
}
117-
while($startRtn.Status -ne 'Succeeded' -and $count -lt 5)
118-
119-
}
120-
else
121-
{
122-
Write-Output " $vmName started"
123-
}
124-
125-
if($startRtn.Status -ne 'Succeeded'){Write-Output "Startup of $VMName FAILED on attempt number $count of 5."}
102+
103+
Write-Output "Starting $vmName..."
104+
$count=1
105+
106+
do
107+
{
108+
$status = ((get-azurermvm -ResourceGroupName $resourceGroupName -Name $vmName -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
109+
Write-Output "$vmName current status is $status"
110+
if($status -ne 'VM running')
111+
{
112+
if($count -gt 1)
113+
{
114+
Write-Output "Failed to start $VMName. Retrying in 60 seconds..."
115+
sleep 60
116+
}
117+
118+
$rtn = Start-AzureRMVM -Name $VMName -ResourceGroupName $ResourceGroupName -ea SilentlyContinue
119+
$count++
126120
}
127-
} # end of function
121+
}
122+
while($status -ne 'VM running' -and $count -lt 5)
123+
124+
if($status -eq 'VM running')
125+
{
126+
Write-Output "$VMName started."
127+
}
128+
else
129+
{
130+
Write-Output "Startup of $VMName FAILED on attempt number $count of 5."
131+
}
132+
133+
} # end of start-vm function
128134

129135

130136
Workflow Start-VMs
131137
{ param($VMs, $ResourceGroupName, $loginParams)
132138

133139
foreach -parallel ($vm in $VMs)
134140
{
135-
$login = Login-AzureRmAccount @loginParams
141+
$login = Connect-AzureRmAccount @loginParams
136142
$vmName = $vm.Name
137143
Start-Vm -VmName $vmName -ResourceGroupName $resourceGroupName
138144
}
@@ -144,7 +150,7 @@ Workflow Start-VMs
144150
try
145151
{
146152
# Log into Azure
147-
Login-AzureRmAccount @loginParams -ea Stop | out-null
153+
Connect-AzureRmAccount @loginParams -ea Stop | out-null
148154
}
149155
catch
150156
{
@@ -166,12 +172,8 @@ catch
166172
$vms = Get-AzureRmVM -ResourceGroupName $ResourceGroupName
167173

168174
#pre action confirmation
169-
write-output "Starting..."
170-
foreach ($vm in $VMs)
171-
{
172-
$status = ((get-azurermvm -ResourceGroupName $resourceGroupName -Name $vm.Name -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
173-
"$($vm.Name) - $status"
174-
}
175+
write-output "Starting...$($vms.Name)"
176+
175177

176178
# start your DC or other server first
177179
if($firstServer)

Stop-AzureV2VM.ps1

+47-41
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
.DESCRIPTION
77
Uses PowerShell workflow to stop all VMs in parallel. Includes a retry and wait cycle to display when VMs are stopped. PowerShell
8-
Workflow sessions require Azure authentication into each session so this script uses a splatting of parameters required for Login-AzureRmAccount that
8+
Workflow sessions require Azure authentication into each session so this script uses a splatting of parameters required for Connect-AzureRmAccount that
99
can be passed to each session. Recommend using the New-AzureServicePrincipal script to create the required service principal and associated ApplicationId
1010
and certificate thumbprint required to log into Azure with the -servicePrincipal flag
1111
@@ -73,48 +73,61 @@ param(
7373

7474
$ProgressPreference = 'SilentlyContinue'
7575

76-
if ((Get-Module AzureRM.profile).Version -lt "2.1.0")
77-
{
78-
Write-warning "Old Version of Azure Modules $((Get-Module AzureRM.profile).Version.ToString()) detected. Minimum of 2.1.0 required. Run Update-AzureRM"
76+
import-module AzureRM
77+
78+
if ((Get-Module AzureRM).Version -lt "5.5.0") {
79+
Write-warning "Old version of Azure PowerShell module $((Get-Module AzureRM).Version.ToString()) detected. Minimum of 5.5.0 required. Run Update-Module AzureRM"
7980
BREAK
8081
}
8182

8283
workflow Stop-Vms
83-
{ param($VMS, $ResourceGroupName, $loginParams)
84+
{ param($VMS, $ResourceGroupName, $loginParams, [switch]$Force)
8485

8586
# Get all Azure VMs in the subscription that are not stopped and deallocated, and shut them down
86-
$login = Login-AzureRmAccount @loginParams
87+
$login = Connect-AzureRmAccount @loginParams
8788

8889
foreach -parallel ($vm in $VMs)
8990
{
90-
$null = Login-AzureRmAccount @loginParams
91+
$null = Connect-AzureRmAccount @loginParams
9192

9293
$vmName = $vm.Name
93-
$status = ((get-azurermvm -ResourceGroupName $resourceGroupName -Name $vmName -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
94-
95-
if($status -ne 'VM deallocated')
94+
$count=0
95+
96+
do
9697
{
97-
$stopRtn = Stop-AzureRMVM -Name $VMName -ResourceGroupName $resourceGroupName -force -ea SilentlyContinue
98-
99-
$count=1
100-
if($stopRtn.Status -ne 'Succeeded')
101-
{
102-
do{
103-
Write-Output "Failed to stop $VMname. Retrying in 60 seconds..."
104-
sleep 60
105-
$stopRtn = Stop-AzureRMVM -Name $VMname -ResourceGroupName $resourceGroupName -force -ea SilentlyContinue
106-
$count++
107-
}
108-
while($stopRtn.Status -ne 'Succeeded' -and $count -lt 5)
109-
110-
}
111-
else
112-
{
113-
Write-Output " $vmName stopped"
114-
}
98+
$status = ((Get-AzureRmVm -ResourceGroupName $resourceGroupName -Name $vmName -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
99+
Write-Output "$vmName current status is $status"
100+
if($status -ne 'VM deallocated')
101+
{
102+
if($count -gt 0)
103+
{
104+
Write-Output "Failed to stop $VMName. Retrying in 60 seconds..."
105+
sleep 60
106+
}
107+
108+
if($force)
109+
{
110+
$rtn = Stop-AzureRMVM -Name $VMName -ResourceGroupName $resourceGroupName -force -ea SilentlyContinue
111+
}
112+
else
113+
{
114+
$rtn = Stop-AzureRMVM -Name $VMName -ResourceGroupName $resourceGroupName -ea SilentlyContinue
115+
}
116+
117+
$count++
118+
}
119+
120+
}
121+
while($status -ne 'VM deallocated' -and $count -lt 5)
115122

116-
if($stopRtn.Status -ne 'Succeeded'){Write-Output "Shutdown for $VMName FAILED on attempt number $count of 5."}
117-
}
123+
if($status -eq 'VM deallocated')
124+
{
125+
Write-Output "$VMName stopped."
126+
}
127+
else
128+
{
129+
Write-Output "Shutdown for $VMName FAILED on attempt number $count of 5."
130+
}
118131

119132
}
120133
} # end of workflow
@@ -134,7 +147,7 @@ $loginParams = @{
134147
try
135148
{
136149
# Log into Azure
137-
Login-AzureRmAccount @loginParams -ea Stop | out-null
150+
Connect-AzureRmAccount @loginParams -ea Stop | out-null
138151
}
139152
catch
140153
{
@@ -157,17 +170,10 @@ catch
157170
$vms = Get-AzureRmVM -ResourceGroupName $ResourceGroupName
158171

159172
#pre action confirmation
160-
write-output "Shutting down..."
161-
foreach ($vm in $VMs)
162-
{
163-
$status = ((get-azurermvm -ResourceGroupName $resourceGroupName -Name $vm.Name -status).Statuses|where{$_.Code -like 'PowerState*'}).DisplayStatus
164-
"$($vm.Name) - $status"
165-
}
166-
167-
173+
write-output "Shutting down...$($vms.Name)"
168174

169-
# call workflow
170-
Stop-Vms -VMs $vms -ResourceGroupName $resourceGroupName -loginParams $loginParams
175+
# call workflow - Remove -Force if you want confirmation for each VM
176+
Stop-Vms -VMs $vms -ResourceGroupName $resourceGroupName -loginParams $loginParams -Force
171177

172178

173179
#post action confirmation

0 commit comments

Comments
 (0)