Public/Invoke-PowerState.ps1
Function Invoke-PowerState { <# .DESCRIPTION Modify the powerstate of one or more VMs at once. This command can also be used to discover the statuses. .PARAMETER Force Used to force the shutdown of VMs. Not recommended unless you are aware of the risks involved. .PARAMETER Restart Specifies Restarting the VM or VMs .PARAMETER Shutdown Specifies Shutting Down the VM or VMs .PARAMETER Start Specifies Starting the VM or VMs .PARAMETER Status Specifies showing the status of the VM or VMs .EXAMPLE Specifies the selected VM's will be shutdown forcefully Invoke-Powerstate -Shutdown -Force .EXAMPLE Specifies the selected VM's will be restarted Invoke-Powerstate -Restart .EXAMPLE Specifies the selected VM's will be Started Invoke-Powerstate -Start .EXAMPLE Specifies the discover of VM statuses Invoke-Powerstate -status .NOTES Requires the AZ module be installed, imported, and Connected. .LINK Get-AzVM New-AzVM Remove-AzVM Restart-AzVM Stop-AzVM Update-AzVM #> [CmdletBinding()] Param ( [Parameter(Mandatory = $false, ParameterSetName = 'Shutdown')] [switch]$Force, [Parameter(Mandatory = $True, ParameterSetName = 'Restart')] [switch]$Restart, [Parameter(Mandatory = $True, ParameterSetName = 'Shutdown')] [switch]$Shutdown, [Parameter(Mandatory = $True, ParameterSetName = 'Start')] [switch]$Start, [Parameter(Mandatory = $True, ParameterSetName = 'Status')] [switch]$Status ) #Set the subscription - Set-AzContext Write-Host "Select the subscription containing the VM's" -ForegroundColor Green Set-Subscription #Set the Resourcegroup name being worked in Write-Host "Select the Resource Group containing the VM's" -ForegroundColor Green $RG = Get-AzResourceGroup | Out-GridView -PassThru -Title 'Select the resource group containing the VMs' Write-Host "Resource group set to $RG" #Invoke specified power state if ($Shutdown) { #Select VM's having their power state changed Write-Host "Select the VM's that are having their power state changed" -ForegroundColor Green $VMs = Get-AzVM -Status -ResourceGroupName $RG.ResourceGroupName | Out-GridView -PassThru -Title 'Select the VM or VMs that will have their power state changed' if ($Force) { #Forcefully shutdown the VMs $VMs | Stop-AzVM -ResourceGroupName $RG.ResourceGroupName -Force -NoWait } else { #Shutdown the VMs $VMs | Stop-AzVM -ResourceGroupName $RG.ResourceGroupName -NoWait } } if ($Start) { #Select VM's having their power state changed Write-Host "Select the VM's that are having their power state changed" -ForegroundColor Green $VMs = Get-AzVM -Status -ResourceGroupName $RG.ResourceGroupName | Out-GridView -PassThru -Title 'Select the VM or VMs that will have their power state changed' #Start the VMs $VMs | Start-AzVM -ResourceGroupName $RG.ResourceGroupName -NoWait } if ($Status) { Get-AzVM -Status -ResourceGroupName $RG.ResourceGroupName | Select-Object Name, Powerstate | Out-GridView } if ($restart) { #Select VM's having their power state changed Write-Host "Select the VM's that are having their power state changed" -ForegroundColor Green $VMs = Get-AzVM -Status -ResourceGroupName $RG.ResourceGroupName | Out-GridView -PassThru -Title 'Select the VM or VMs that will have their power state changed' #Restart the VMs $VMs | Restart-AzVM -ResourceGroupName $RG.ResourceGroupName -NoWait } } |