我已经使用template.json文件通过powershell创建了VM。这些是将创建的资源类型的列表。
1.虚拟机
2.网络接口
3.网络安全组
4.磁盘
现在,我要做的是在新创建的VM上更新一些应用程序,推广该VM并创建新VM的映像。直到这里,我都能通过powershell做到这一点。
现在,我的要求是删除在旋转虚拟机期间创建的所有资源。我知道删除VM的cmdlet是这个。
Remove-VM -Name "new 2" -Force
是否有单个命令可以执行此任务?
任何帮助或投入都将受到高度赞赏。谢谢
答案 0 :(得分:1)
与虚拟机关联的资源在删除虚拟机时不会自动删除,主要是这样,因此您可以根据需要重新使用它们,例如,如果要删除虚拟机但要使用相同的虚拟机重新创建VHD等。如果您知道要删除VM和关联的资源,这可能会很烦人。除了手动删除所有内容外,您实际上只有2个选项
删除资源组-这在这里有助于将资源组的范围缩小到最小,从而有助于实现这一目标
编写脚本来为您删除VM和资源,一个很好的例子是here。
我建议您对另一个Azure客户提交的想法进行投票。
您在这些论坛中分享的所有反馈将由Azure团队监视和审查。
答案 1 :(得分:0)
使用这篇出色的文章。这是推荐文章,我在许多Technet论坛答复中都看到过。
答案 2 :(得分:0)
如果将VM和所有相关资源关联到一个资源组,只需删除该资源组将删除所有附加资源及其自身的VM。
您可以像tat那样做:
Get-AzResourceGroup -Name "ContosoRG01" | Remove-AzResourceGroup -Force
这里还有一篇完整的博客文章,描述了如何使用AzureRM和powershell编写VM创建脚本。
答案 3 :(得分:-2)
我在链接下面准备了一个脚本。只需输入虚拟机名称和脚本即可处理其余的 http://cloudcompute.info/delete-azure-vm-and-all-associated-resources-using-powershell-script/
这是完整的脚本
Write-Host -NoNewline -ForegroundColor Green "Please enter the VM name you would like to remove:"
$VMName = Read-Host
$vm = Get-AzVm -Name $VMName
$RGName=$vm.ResourceGroupName
Write-Host -ForegroundColor Cyan 'Resource Group Name is identified as-' $RGName
$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
Write-Host -ForegroundColor Cyan 'Marking Disks for deletion...'
$tags = @{"VMName"=$VMName; "Delete Ready"="Yes"}
$osDiskName = $vm.StorageProfile.OSDisk.Name
$datadisks = $vm.StorageProfile.DataDisks
$ResourceID= (Get-Azdisk -Name $osDiskName).id
New-AzTag -ResourceId $ResourceID -Tag $tags | Out-Null
if ($vm.StorageProfile.DataDisks.Count -gt 0) {
foreach ($datadisks in $vm.StorageProfile.DataDisks){
$datadiskname=$datadisks.name
$ResourceID= (Get-Azdisk -Name $datadiskname).id
New-AzTag -ResourceId $ResourceID -Tag $tags | Out-Null
}
}
if ($vm.Name.Length -gt 9) {
$i = 9
} else {
$i = $vm.Name.Length - 1
}
$azResourceParams = @{
'ResourceName' = $VMName
'ResourceType' = 'Microsoft.Compute/virtualMachines'
'ResourceGroupName' = $RGName
}
$vmResource = Get-AzResource @azResourceParams
$vmId = $vmResource.Properties.VmId
$diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
$saParams = @{
'ResourceGroupName' = $diagSaRg
'Name' = $diagSa
}
Write-Host -ForegroundColor Cyan 'Removing Boot Diagnostic disk..'
Get-AzStorageAccount @saParams | Get-AzStorageContainer | where {$_.Name-eq $diagContainerName} | Remove-AzStorageContainer -Force
Write-Host -ForegroundColor Cyan 'Removing Virtual Machine-' $VMName 'in Resource Group-' $RGName '...'
$null = $vm | Remove-AzVM -Force
Write-Host -ForegroundColor Cyan 'Removing Network Interface Cards, Public IP Address(s) used by the VM...'
foreach($nicUri in $vm.NetworkProfile.NetworkInterfaces.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
}
}
}
Write-Host -ForegroundColor Cyan 'Removing OS disk and Data Disk(s) used by the VM..'
Get-AzResource -tag $tags | where{$_.resourcegroupname -eq $RGName}| Remove-AzResource -force | Out-Null
Write-Host -ForegroundColor Green 'Azure Virtual Machine-' $VMName 'and all the resources associated with the VM were removed sucesfully...'