在 Azure 门户中更改 Azure 虚拟机名称
Change Azure virtual machine name in Azure portal
我们可以在 Azure 门户中更改 Azure 虚拟机的名称吗?我确定我们不能通过门户更改它,我们有任何 PowerShell cmdlet 来更改虚拟机名称吗??
注意:我指的不是 VM 内部的 VM 名称,而是 Azure 门户中显示的名称。
您不能重命名 VM 名称,但可以更新 VM 大小,甚至可以将 VM 移动到 other/change 资源组的一个订阅。
虚拟机的资源名称是不可变的。因此,您需要重新部署虚拟机。
执行此操作的最佳方法是删除当前磁盘,维护磁盘,然后使用指向这些磁盘的正确名称创建一个新磁盘。
如果您在从内部 VM's/Application 实例连接到 VM 时遇到任何问题。您可以在 /etc/hosts 和 /etc/hostname 中更改名称。
修改完这两个文件后,需要重启实例
vi /etc/hosts
127.0.0.1 本地主机 localhost.localdomain
vi /etc/hostname
localhost.localdomain
感谢 Oliver Miossec 的这个非破坏性 azure powershell 脚本,它创建了一个新的 VM,并对参数进行了一些更改。你可以找到他的 post here。它非常棒,因为它还会修复与机器关联的命名错误的光盘和 NIC。
#Deletes and recreates a VM
param (
[Parameter(Mandatory=$true)]
[string]$vmOldName,
[Parameter(Mandatory=$true)]
[string]$vmNewName,
[Parameter(Mandatory=$true)]
[string]$rgName,
[string]$newLocation #Optional, moves the VM to a new Geographic Location
)
$ErrorActionPreference = "Stop"
Write-Host "Get and Shutdown old VM, Create new config"
$SourceVmObject = get-azvm -Name $vmOldName -ResourceGroupName $rgName
if ([string]::IsNullOrEmpty($newLocation)) {
$newLocation = $SourceVmObject.Location
Write-Host "No new location specified, using the current VM's existing location: $newLocation"
}
$SourceVmPowerStatus = (get-azvm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Status).Statuses | where-object code -like "PowerState*"
if ($SourceVmPowerStatus -ne "VM deallocated") {
stop-azVm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Force
Start-Sleep -Seconds 30 #Wait to ensure VM is shutdown.
}
$NewVmObject = New-AzVMConfig -VMName $vmNewName -VMSize $SourceVmObject.HardwareProfile.VmSize
Write-Host "Create new Network Objects"
$subnetID = (Get-AzNetworkInterface -ResourceId $SourceVmObject.NetworkProfile.NetworkInterfaces[0].id).IpConfigurations.Subnet.id
$nic = New-AzNetworkInterface -Name "$($vmNewName.ToLower())-0-nic" -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location -SubnetId $SubnetId
Add-AzVMNetworkInterface -VM $NewVmObject -Id $nic.Id
Write-Host "Move OS Disk"
$SourceOsDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceVmObject.StorageProfile.OsDisk.name).Sku.Name
$SourceOsDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceVmObject.StorageProfile.OsDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceOsDiskSnap = New-AzSnapshot -Snapshot $SourceOsDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-os-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetOsDiskConfig = New-AzDiskConfig -AccountType $SourceOsDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceOsDiskSnap.Id
$TargetOsDisk = New-AzDisk -Disk $TargetOsDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-os-vhd"
Set-AzVMOSDisk -VM $NewVmObject -ManagedDiskId $TargetOsDisk.Id -CreateOption Attach -Windows
Write-Host "Create new Data Disks"
Foreach ($SourceDataDisk in $SourceVmObject.StorageProfile.DataDisks) {
$SourceDataDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceDataDisk.name).Sku.Name
$SourceDataDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceDataDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceDataDiskSnap = New-AzSnapshot -Snapshot $SourceDataDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-$($SourceDataDisk.name)-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetDataDiskConfig = New-AzDiskConfig -AccountType $SourceDataDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceDataDiskSnap.Id
$TargetDataDisk = New-AzDisk -Disk $TargetDataDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd"
Add-AzVMDataDisk -VM $NewVmObject -Name "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd" -ManagedDiskId $TargetDataDisk.Id -Lun $SourceDataDisk.lun -CreateOption "Attach"
}
Write-Host "Creating..."
New-AzVM -VM $NewVmObject -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location
Write-Host "VM Created..."
最初由 Oliver Miossec 编写的脚本。但是,此脚本仅适用于 Windows 个虚拟机。
我添加了一个参数 (-osType) 来指定 osType,因此它也适用于 Linux 个虚拟机。
更新一:
我更新了脚本以自动检测源 VM
的 Os
更新 2:
添加了新参数“-newSubnetId”,它将 VM 移动到新的 vnet 或子网(需要在同一订阅上)
您需要指定子网 ID 的完整 URL,例如:
/subscriptions/<subscriptionID>/resourceGroups/<ressourceGroupName>/providers/Microsoft.Network/virtualNetworks/<virtualNetworkName>/subnets/<subnetName>
#Deletes and recreates a VM
param (
[Parameter(Mandatory=$true)]
[string]$vmOldName,
[Parameter(Mandatory=$true)]
[string]$vmNewName,
[Parameter(Mandatory=$true)]
[string]$rgName,
[string]$newLocation, #Optional, moves the VM to a new Geographic Location
[string]$newSubnetId #Optional, moves the VM to a new Subnet
)
$ErrorActionPreference = "Stop"
Write-Host "Get and shutdown old VM, Create new config"
$SourceVmObject = get-azvm -Name $vmOldName -ResourceGroupName $rgName
if ([string]::IsNullOrEmpty($newLocation)) {
$newLocation = $SourceVmObject.Location
Write-Host "No new location specified, using the current VM's existing location: $newLocation"
}
$SourceVmPowerStatus = (get-azvm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Status).Statuses | where-object code -like "PowerState*"
if ($SourceVmPowerStatus -ne "VM deallocated") {
stop-azVm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Force
Start-Sleep -Seconds 30 #Wait to ensure VM is shutdown.
}
$NewVmObject = New-AzVMConfig -VMName $vmNewName -VMSize $SourceVmObject.HardwareProfile.VmSize
Write-Host "Create new Network Objects"
if ([string]::IsNullOrEmpty($newSubnetId)) {
$subnetID = (Get-AzNetworkInterface -ResourceId $SourceVmObject.NetworkProfile.NetworkInterfaces[0].id).IpConfigurations.Subnet.id
Write-Host "No new Subnet specified, using the current VM's existing subnet: $subnetID"
} else {
$subnetID = $newSubnetId
Write-Host "new Subnet specified, $subnetID"
}
$nic = New-AzNetworkInterface -Name "$($vmNewName.ToLower())-0-nic" -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location -SubnetId $SubnetId
Add-AzVMNetworkInterface -VM $NewVmObject -Id $nic.Id
Write-Host "Move OS Disk"
$SourceOsDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceVmObject.StorageProfile.OsDisk.name).Sku.Name
$SourceOsDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceVmObject.StorageProfile.OsDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceOsDiskSnap = New-AzSnapshot -Snapshot $SourceOsDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-os-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetOsDiskConfig = New-AzDiskConfig -AccountType $SourceOsDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceOsDiskSnap.Id
$TargetOsDisk = New-AzDisk -Disk $TargetOsDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-os-vhd"
Set-AzVMOSDisk -VM $NewVmObject -ManagedDiskId $TargetOsDisk.Id -CreateOption Attach $SourceVmObject.StorageProfile.OSDisk.OsType
$NewVmObject.StorageProfile.OSDisk.OsType = $SourceVmObject.StorageProfile.OSDisk.OsType
$NewVmObject.StorageProfile.OSDisk.Name = "$($vmNewName.ToLower())-os-vhd"
Write-Host "Create new Data Disks"
Foreach ($SourceDataDisk in $SourceVmObject.StorageProfile.DataDisks) {
$SourceDataDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceDataDisk.name).Sku.Name
$SourceDataDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceDataDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceDataDiskSnap = New-AzSnapshot -Snapshot $SourceDataDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-$($SourceDataDisk.name)-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetDataDiskConfig = New-AzDiskConfig -AccountType $SourceDataDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceDataDiskSnap.Id
$TargetDataDisk = New-AzDisk -Disk $TargetDataDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd"
Add-AzVMDataDisk -VM $NewVmObject -Name "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd" -ManagedDiskId $TargetDataDisk.Id -Lun $SourceDataDisk.lun -CreateOption "Attach"
}
Write-Host "Creating..."
New-AzVM -VM $NewVmObject -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location
Write-Host "VM Created..."
在 Azure VM 中,资源名称一旦部署就无法修改,因此最佳做法是保留磁盘并在之前的磁盘之后创建一个具有适当名称的新 VM。
我们可以在 Azure 门户中更改 Azure 虚拟机的名称吗?我确定我们不能通过门户更改它,我们有任何 PowerShell cmdlet 来更改虚拟机名称吗??
注意:我指的不是 VM 内部的 VM 名称,而是 Azure 门户中显示的名称。
您不能重命名 VM 名称,但可以更新 VM 大小,甚至可以将 VM 移动到 other/change 资源组的一个订阅。
虚拟机的资源名称是不可变的。因此,您需要重新部署虚拟机。
执行此操作的最佳方法是删除当前磁盘,维护磁盘,然后使用指向这些磁盘的正确名称创建一个新磁盘。
如果您在从内部 VM's/Application 实例连接到 VM 时遇到任何问题。您可以在 /etc/hosts 和 /etc/hostname 中更改名称。 修改完这两个文件后,需要重启实例
vi /etc/hosts
127.0.0.1 本地主机 localhost.localdomain
vi /etc/hostname
localhost.localdomain
感谢 Oliver Miossec 的这个非破坏性 azure powershell 脚本,它创建了一个新的 VM,并对参数进行了一些更改。你可以找到他的 post here。它非常棒,因为它还会修复与机器关联的命名错误的光盘和 NIC。
#Deletes and recreates a VM
param (
[Parameter(Mandatory=$true)]
[string]$vmOldName,
[Parameter(Mandatory=$true)]
[string]$vmNewName,
[Parameter(Mandatory=$true)]
[string]$rgName,
[string]$newLocation #Optional, moves the VM to a new Geographic Location
)
$ErrorActionPreference = "Stop"
Write-Host "Get and Shutdown old VM, Create new config"
$SourceVmObject = get-azvm -Name $vmOldName -ResourceGroupName $rgName
if ([string]::IsNullOrEmpty($newLocation)) {
$newLocation = $SourceVmObject.Location
Write-Host "No new location specified, using the current VM's existing location: $newLocation"
}
$SourceVmPowerStatus = (get-azvm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Status).Statuses | where-object code -like "PowerState*"
if ($SourceVmPowerStatus -ne "VM deallocated") {
stop-azVm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Force
Start-Sleep -Seconds 30 #Wait to ensure VM is shutdown.
}
$NewVmObject = New-AzVMConfig -VMName $vmNewName -VMSize $SourceVmObject.HardwareProfile.VmSize
Write-Host "Create new Network Objects"
$subnetID = (Get-AzNetworkInterface -ResourceId $SourceVmObject.NetworkProfile.NetworkInterfaces[0].id).IpConfigurations.Subnet.id
$nic = New-AzNetworkInterface -Name "$($vmNewName.ToLower())-0-nic" -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location -SubnetId $SubnetId
Add-AzVMNetworkInterface -VM $NewVmObject -Id $nic.Id
Write-Host "Move OS Disk"
$SourceOsDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceVmObject.StorageProfile.OsDisk.name).Sku.Name
$SourceOsDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceVmObject.StorageProfile.OsDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceOsDiskSnap = New-AzSnapshot -Snapshot $SourceOsDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-os-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetOsDiskConfig = New-AzDiskConfig -AccountType $SourceOsDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceOsDiskSnap.Id
$TargetOsDisk = New-AzDisk -Disk $TargetOsDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-os-vhd"
Set-AzVMOSDisk -VM $NewVmObject -ManagedDiskId $TargetOsDisk.Id -CreateOption Attach -Windows
Write-Host "Create new Data Disks"
Foreach ($SourceDataDisk in $SourceVmObject.StorageProfile.DataDisks) {
$SourceDataDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceDataDisk.name).Sku.Name
$SourceDataDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceDataDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceDataDiskSnap = New-AzSnapshot -Snapshot $SourceDataDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-$($SourceDataDisk.name)-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetDataDiskConfig = New-AzDiskConfig -AccountType $SourceDataDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceDataDiskSnap.Id
$TargetDataDisk = New-AzDisk -Disk $TargetDataDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd"
Add-AzVMDataDisk -VM $NewVmObject -Name "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd" -ManagedDiskId $TargetDataDisk.Id -Lun $SourceDataDisk.lun -CreateOption "Attach"
}
Write-Host "Creating..."
New-AzVM -VM $NewVmObject -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location
Write-Host "VM Created..."
我添加了一个参数 (-osType) 来指定 osType,因此它也适用于 Linux 个虚拟机。
更新一: 我更新了脚本以自动检测源 VM
的 Os更新 2: 添加了新参数“-newSubnetId”,它将 VM 移动到新的 vnet 或子网(需要在同一订阅上)
您需要指定子网 ID 的完整 URL,例如:
/subscriptions/<subscriptionID>/resourceGroups/<ressourceGroupName>/providers/Microsoft.Network/virtualNetworks/<virtualNetworkName>/subnets/<subnetName>
#Deletes and recreates a VM
param (
[Parameter(Mandatory=$true)]
[string]$vmOldName,
[Parameter(Mandatory=$true)]
[string]$vmNewName,
[Parameter(Mandatory=$true)]
[string]$rgName,
[string]$newLocation, #Optional, moves the VM to a new Geographic Location
[string]$newSubnetId #Optional, moves the VM to a new Subnet
)
$ErrorActionPreference = "Stop"
Write-Host "Get and shutdown old VM, Create new config"
$SourceVmObject = get-azvm -Name $vmOldName -ResourceGroupName $rgName
if ([string]::IsNullOrEmpty($newLocation)) {
$newLocation = $SourceVmObject.Location
Write-Host "No new location specified, using the current VM's existing location: $newLocation"
}
$SourceVmPowerStatus = (get-azvm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Status).Statuses | where-object code -like "PowerState*"
if ($SourceVmPowerStatus -ne "VM deallocated") {
stop-azVm -Name $SourceVmObject.Name -ResourceGroupName $SourceVmObject.ResourceGroupName -Force
Start-Sleep -Seconds 30 #Wait to ensure VM is shutdown.
}
$NewVmObject = New-AzVMConfig -VMName $vmNewName -VMSize $SourceVmObject.HardwareProfile.VmSize
Write-Host "Create new Network Objects"
if ([string]::IsNullOrEmpty($newSubnetId)) {
$subnetID = (Get-AzNetworkInterface -ResourceId $SourceVmObject.NetworkProfile.NetworkInterfaces[0].id).IpConfigurations.Subnet.id
Write-Host "No new Subnet specified, using the current VM's existing subnet: $subnetID"
} else {
$subnetID = $newSubnetId
Write-Host "new Subnet specified, $subnetID"
}
$nic = New-AzNetworkInterface -Name "$($vmNewName.ToLower())-0-nic" -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location -SubnetId $SubnetId
Add-AzVMNetworkInterface -VM $NewVmObject -Id $nic.Id
Write-Host "Move OS Disk"
$SourceOsDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceVmObject.StorageProfile.OsDisk.name).Sku.Name
$SourceOsDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceVmObject.StorageProfile.OsDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceOsDiskSnap = New-AzSnapshot -Snapshot $SourceOsDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-os-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetOsDiskConfig = New-AzDiskConfig -AccountType $SourceOsDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceOsDiskSnap.Id
$TargetOsDisk = New-AzDisk -Disk $TargetOsDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-os-vhd"
Set-AzVMOSDisk -VM $NewVmObject -ManagedDiskId $TargetOsDisk.Id -CreateOption Attach $SourceVmObject.StorageProfile.OSDisk.OsType
$NewVmObject.StorageProfile.OSDisk.OsType = $SourceVmObject.StorageProfile.OSDisk.OsType
$NewVmObject.StorageProfile.OSDisk.Name = "$($vmNewName.ToLower())-os-vhd"
Write-Host "Create new Data Disks"
Foreach ($SourceDataDisk in $SourceVmObject.StorageProfile.DataDisks) {
$SourceDataDiskSku = (get-azdisk -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName $SourceDataDisk.name).Sku.Name
$SourceDataDiskSnapConfig = New-AzSnapshotConfig -SourceUri $SourceDataDisk.ManagedDisk.Id -Location $SourceVmObject.Location -CreateOption copy
$SourceDataDiskSnap = New-AzSnapshot -Snapshot $SourceDataDiskSnapConfig -SnapshotName "$($SourceVmObject.Name)-$($SourceDataDisk.name)-snap" -ResourceGroupName $SourceVmObject.ResourceGroupName
$TargetDataDiskConfig = New-AzDiskConfig -AccountType $SourceDataDiskSku -Location $SourceVmObject.Location -CreateOption Copy -SourceResourceId $SourceDataDiskSnap.Id
$TargetDataDisk = New-AzDisk -Disk $TargetDataDiskConfig -ResourceGroupName $SourceVmObject.ResourceGroupName -DiskName "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd"
Add-AzVMDataDisk -VM $NewVmObject -Name "$($vmNewName.ToLower())-$($SourceDataDisk.lun)-vhd" -ManagedDiskId $TargetDataDisk.Id -Lun $SourceDataDisk.lun -CreateOption "Attach"
}
Write-Host "Creating..."
New-AzVM -VM $NewVmObject -ResourceGroupName $SourceVmObject.ResourceGroupName -Location $SourceVmObject.Location
Write-Host "VM Created..."
在 Azure VM 中,资源名称一旦部署就无法修改,因此最佳做法是保留磁盘并在之前的磁盘之后创建一个具有适当名称的新 VM。