UUIDs ändern von VMs

Doppelte UUIDs? Ja kann man ändern!

Stellt man nun fest, dass man eine doppelte UUID hat, oder sogar mehrere, kann man hierüber für eine einzelne, oder mehrere VMs eine generierte oder definierte UUID setzen. Damit erspart man sich das Herunterfahren und Deregistrieren der VM, das herunterladen der vmx und das händische generieren der UUID, dann anpassen der vmx, hochladen der vmx, registrieren der VM und wieder starten.

Hier mal der Scriptblock dazu:

#. .\Get-VMUuid.ps1 #change the path or made quote and load manually
if (!(Get-Command Get-VMUuid)) {
    return 'function Get-VMUuid not loaded'
}
 
#set a new uuid
function Set-VMUuid ($VMs$Uuids) {
    #check conditions
    if (!$VMs) {
        return 'Variable VMs is empty!'
    }
     
    if ($Uuids -AND ($Uuids.count) -ne ($VMs.count)) {
        return 'count VM and uuid need to be the same'
    }
 
    #change
    $i = 0
    $result = @()
    foreach($VM in $VMs) {
        #make the uuid
        if ($Uuids) {
            if ($Uuids.count -eq 1) {
                $Uuid $Uuids
            } else {
                $Uuid $Uuids[$i]
            }
        } else {
            $Uuid = New-Guid
        }
 
        While((Get-VM $VM).PowerState -ne 'PoweredOff') {
            Write-Host $VM 'is already running, please shutdown'   
            Wait-Event -Timeout 5
        }
        $UuidVmOld = Get-VMUuid $VM
         
        $objVM = Get-VM $VM
        $Spec New-Object VMware.Vim.VirtualMachineConfigSpec
        $Spec.Uuid = $Uuid
        $TaskId $objVM.Extensiondata.ReconfigVM_Task($Spec)
        Wait-Event -Timeout 1
        $UuidVmNew = Get-VMUuid $VM
         
        #preparing return
        $obj New-Object PSCustomObject
        $obj Add-Member -Type NoteProperty -name 'VM' -Value $VM
        $obj Add-Member -Type NoteProperty -name 'OldUuid' -Value $UuidVmOld.Uuid
        $obj Add-Member -Type NoteProperty -name 'Generated Uuid' -Value $Uuid
        $obj Add-Member -Type NoteProperty -name 'NewUuid' -Value $UuidVmNew.Uuid
        $obj Add-Member -Type NoteProperty -name 'TaskID' -Value $TaskId
 
        $result += $obj
 
        $i++
    }
    return $result
}

ACHTUNG: Das Script holt sich zuerst die vorhandenen UUIDs und dokumentiert diese, damit man bei einem Fehler wieder auf diese UUID zurückwechseln kann.
ACHTUNG: Das Ändern der UUID hat unter Umständen auch auf Lizenzen einfluss, welche auf die UUID referenzieren, sprich man sollte sich gut überlegen, welche UUID man ändert.

Aufruf Ergebnis
Set-VMUuid 'VMNAME' Ändert die UUID für eine VM durch eine automatisch generierte UUID
Set-VMUuid $VMlist Ändert die UUID für mehrere VMs durch eine automatisch generierte UUID 
Set-VMUuid 'VMNAME' 'UUID' Ändert die UUID für eine VM durch die mitgegebene UUID
Set-VMUuid $VMlist $UUIDlist Ändert die UUID für mehrere VMs durch die mitgegebenen UUIDs 

Drucken