Azure: PowerShell to remove Virtual Machines and Cleanup
Summary
Mainly following:
Removing Azure Virtual Machines and Cleanup with PowerShell
https://medium.com/@adbertram/azure-virtual-machine-powershell-removal-e71169dd39ea
to remove a Testing Machine with PowerShell from my Ubuntu Workstation.
Only removing the Disk not work.
Used another way to delete it.
How-to
PS /home/User> Get-AzStorageAccount @saParams | Get-AzStorageContainer | where {$_.Name -eq $diagContainerName} | Remove-AzStorageContainer -Force
Appendix: Enable-AzureRmAlias : Could not find a part of the path
References
Removing Azure Virtual Machines and Cleanup with PowerShell
https://medium.com/@adbertram/azure-virtual-machine-powershell-removal-e71169dd39ea
Installing PowerShell Core on Linux
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux
Install the Azure PowerShell module
https://docs.microsoft.com/en-us/powershell/azure/install-az-ps
Update
Mainly following:
Removing Azure Virtual Machines and Cleanup with PowerShell
https://medium.com/@adbertram/azure-virtual-machine-powershell-removal-e71169dd39ea
to remove a Testing Machine with PowerShell from my Ubuntu Workstation.
Only removing the Disk not work.
Used another way to delete it.
How-to
$ pwsh
PS /home/User>$vm = Get-AzVM -Name VM1 -ResourceGroupName My-Group-01
ResourceGroupName : My-Group-01
Id : /subscriptions/{...}/resour
ceGroups/My-Group-01/providers/Microsoft.Compute/virtualMachines/VM1
VmId : {...}
Name : VM1
Type : Microsoft.Compute/virtualMachines
Location : southeastasia
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
ProvisioningState : Succeeded
StorageProfile : {OsDisk, DataDisks}
Id : /subscriptions/{...}/resour
ceGroups/My-Group-01/providers/Microsoft.Compute/virtualMachines/VM1
VmId : {...}
Name : VM1
Type : Microsoft.Compute/virtualMachines
Location : southeastasia
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
ProvisioningState : Succeeded
StorageProfile : {OsDisk, DataDisks}
PS /home/User> $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
PS /home/User> echo $diagSa
mygroup01diag714
mygroup01diag714
PS /home/User> $azResourceParams = @{
>> 'ResourceName' = 'VM1'
>> 'ResourceType' = 'Microsoft.Compute/virtualMachines'
>> 'ResourceGroupName' = 'My-Group-01'
>> }
PS /home/User> $vmResource = Get-AzResource @azResourceParams
>> 'ResourceName' = 'VM1'
>> 'ResourceType' = 'Microsoft.Compute/virtualMachines'
>> 'ResourceGroupName' = 'My-Group-01'
>> }
PS /home/User> $vmResource = Get-AzResource @azResourceParams
PS /home/User> echo $vmResource
Name : VM1
ResourceGroupName : My-Group-01
ResourceType : Microsoft.Compute/virtualMachines
Location : southeastasia
ResourceId : /subscriptions/{...}/resourceGroups/My-Group-01/providers/Microsoft.Compute/virtualMachines/VM1
Name : VM1
ResourceGroupName : My-Group-01
ResourceType : Microsoft.Compute/virtualMachines
Location : southeastasia
ResourceId : /subscriptions/{...}/resourceGroups/My-Group-01/providers/Microsoft.Compute/virtualMachines/VM1
PS /home/User> $vmId = $vmResource.Properties.VmId
PS /home/User> echo $vmId
abc12345-1234-abcd-1234-abcdefghjklm
abc12345-1234-abcd-1234-abcdefghjklm
PS /home/User> $diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
PS /home/User> echo $diagContainerName
bootdiagnostics-vm1-abc12345-1234-abcd-1234-abcdefghjklm
bootdiagnostics-vm1-abc12345-1234-abcd-1234-abcdefghjklm
PS /home/User> $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
PS /home/User> echo $diagSaRg
My-Group-01
My-Group-01
PS /home/User> $saParams = @{
>> 'ResourceGroupName' = $diagSaRg
>> 'Name' = $diagSa
>> }
>> 'ResourceGroupName' = $diagSaRg
>> 'Name' = $diagSa
>> }
PS /home/User> echo $saParams
Name Value
---- -----
Name mygroup01diag714
ResourceGroupName My-Group-01
Name Value
---- -----
Name mygroup01diag714
ResourceGroupName My-Group-01
PS /home/User> Get-AzStorageAccount @saParams | Get-AzStorageContainer | where {$_.Name -eq $diagContainerName} | Remove-AzStorageContainer -Force
PS /home/User> $null = $vm | Remove-AzVM -Force
PS /home/User> foreach($nicUri in $vm.NetworkProfile.NetworkInterces.Id) {
>> $nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
>> Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force
>> foreach($ipConfig in $nic.IpConfigurations) {
>> if($ipConfig.PublicIpAddress -ne $null) {
>> Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
>> }
>> }
>> }
>> $nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
>> Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force
>> foreach($ipConfig in $nic.IpConfigurations) {
>> if($ipConfig.PublicIpAddress -ne $null) {
>> Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
>> }
>> }
>> }
PS /home/User> $osDiskUri = $vm.StorageProfile.OSDisk.Vhd.Uri
PS /home/User> echo $osDiskUri
PS /home/User> $vm.StorageProfile
-------------- ------ ---------
Microsoft.Azure.Management.Compute.Models.OSDisk {}
PS /home/User> echo $osDiskUri
PS /home/User> $vm.StorageProfile
-------------- ------ ---------
Microsoft.Azure.Management.Compute.Models.OSDisk {}
PS /home/User> Get-AzDisk -ReouceGroupName My-Group-01
PS /home/User> Remove-AzDisk -ResourceGroupName My-Group-01 -DiskName vm1-osdisk-1234MMDD-SSSSS -Force
PS /home/User> Remove-AzDisk -ResourceGroupName My-Group-01 -DiskName vm1-osdisk-1234MMDD-SSSSS -Force
Appendix: Enable-AzureRmAlias : Could not find a part of the path
Enable-AzureRmAlias : Could not find a part of the path '/home/User/.config/powershell/profile.ps1'.
PS /home/User> Test-Path $profile
False
PS /home/User> New-Item -ItemType File -PAth $profile -Force
PS /home/User> Enable-AzureRmAlias -Scope CurrentUser
False
PS /home/User> New-Item -ItemType File -PAth $profile -Force
PS /home/User> Enable-AzureRmAlias -Scope CurrentUser
References
Removing Azure Virtual Machines and Cleanup with PowerShell
https://medium.com/@adbertram/azure-virtual-machine-powershell-removal-e71169dd39ea
Installing PowerShell Core on Linux
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux
Install the Azure PowerShell module
https://docs.microsoft.com/en-us/powershell/azure/install-az-ps
Update