One of the common problems that vcenter admins have faced is mapping the hard disks seen in vmware to the hard disks seen on computers in disk management.
This powershell script helps in matching disks seen in vcenter to those seen on the computer.
Install the vmware powercli before this. Recent powercli link is here
https://code.vmware.com/web/dp/tool/vmware-powercli/6.5.4
Even if you have an updated one the script should work fine. Unless the cmdlets are changed.
You also need to have at least read permissions in vmware and administrator on the server.
If the disk serial number is missing in the OS this script will not work.
Check if the disk serial number is present by running this in powershell.
Get-WmiObject -Class Win32_DiskDrive | select serialnumber
If there is no serial number then add/modify the following parameter in the vm's advanced configuration.
“disk.EnableUUID = “TRUE”
KB link is here
https://kb.vmware.com/s/article/52815
## Show corresponding disks in vmware and computer ##
param(
[Parameter(Mandatory=$true)]
[string] $Computername
)
Function OutData($data) {Write-host $data -ForegroundColor Green}
Function Get-LocalDisk($Computer,[System.Management.Automation.CredentialAttribute()]$Credentials)
{
$PDiskDrives = Get-WmiObject -Class Win32_DiskDrive -ComputerName $Computer -Credential $Credentials
return $PDiskDrives
}
## Load Vmware assemblies ##
Import-Module VMWare.VimAutomation.sdk
Import-Module VMWare.VimAutomation.Core
## Connect Vmware
$Credentials = Get-Credential -Message "Enter your Vcenter credentials"
$LocalDriveObjects = @()
Connect-VIServer Vcenter -Credential $Credentials
$LocalDisks = Get-LocalDisk $Computername -Credentials $Credentials
$vmHardDisks = Get-VM -Name $ComputerName | Get-HardDisk
$vmDatacenterView = Get-VM -Name $ComputerName | Get-Datacenter | Get-View
$virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager
Write-Host "Number of disks : $($LocalDisks.count)"
foreach($DObject in $LocalDisks)
{
# Write-host "Working on $DObject"
foreach($vmHardDisk in $vmHardDisks)
{
$vmHardDiskUuid = $virtualDiskManager.queryvirtualdiskuuid($vmHardDisk.Filename, $vmDatacenterView.MoRef) | foreach {$_.replace(' ','').replace('-','')}
if($DObject.SerialNumber -eq $vmHardDiskUuid)
{
$Output = "$($vmHardDisk.Name) $($vmHardDisk.capacityGB)" + "GB" + " Computer Disk: " + $("Disk " + $Dobject.Index) + " " + $([math]::round($DObject.Size/1GB, 3)) + "GB" + " on $Computername"
$Vdisk = "Vcenter: $($vmHardDisk.Name) $($vmHardDisk.capacityGB)" + "GB "
$ComputerDisk = "Computer: " + $("Disk " + $Dobject.Index) + " " + $([math]::round($DObject.Size/1GB, 2)) + "GB"
Write-Host $Vdisk -ForegroundColor Yellow -NoNewline
Write-Host $ComputerDisk -ForegroundColor White
}
}
}
## Author: Parag Waghmare
This powershell script helps in matching disks seen in vcenter to those seen on the computer.
Install the vmware powercli before this. Recent powercli link is here
https://code.vmware.com/web/dp/tool/vmware-powercli/6.5.4
Even if you have an updated one the script should work fine. Unless the cmdlets are changed.
You also need to have at least read permissions in vmware and administrator on the server.
If the disk serial number is missing in the OS this script will not work.
Check if the disk serial number is present by running this in powershell.
Get-WmiObject -Class Win32_DiskDrive | select serialnumber
If there is no serial number then add/modify the following parameter in the vm's advanced configuration.
“disk.EnableUUID = “TRUE”
KB link is here
https://kb.vmware.com/s/article/52815
## Show corresponding disks in vmware and computer ##
param(
[Parameter(Mandatory=$true)]
[string] $Computername
)
Function OutData($data) {Write-host $data -ForegroundColor Green}
Function Get-LocalDisk($Computer,[System.Management.Automation.CredentialAttribute()]$Credentials)
{
$PDiskDrives = Get-WmiObject -Class Win32_DiskDrive -ComputerName $Computer -Credential $Credentials
return $PDiskDrives
}
## Load Vmware assemblies ##
Import-Module VMWare.VimAutomation.sdk
Import-Module VMWare.VimAutomation.Core
## Connect Vmware
$Credentials = Get-Credential -Message "Enter your Vcenter credentials"
$LocalDriveObjects = @()
Connect-VIServer Vcenter -Credential $Credentials
$LocalDisks = Get-LocalDisk $Computername -Credentials $Credentials
$vmHardDisks = Get-VM -Name $ComputerName | Get-HardDisk
$vmDatacenterView = Get-VM -Name $ComputerName | Get-Datacenter | Get-View
$virtualDiskManager = Get-View -Id VirtualDiskManager-virtualDiskManager
Write-Host "Number of disks : $($LocalDisks.count)"
foreach($DObject in $LocalDisks)
{
# Write-host "Working on $DObject"
foreach($vmHardDisk in $vmHardDisks)
{
$vmHardDiskUuid = $virtualDiskManager.queryvirtualdiskuuid($vmHardDisk.Filename, $vmDatacenterView.MoRef) | foreach {$_.replace(' ','').replace('-','')}
if($DObject.SerialNumber -eq $vmHardDiskUuid)
{
$Output = "$($vmHardDisk.Name) $($vmHardDisk.capacityGB)" + "GB" + " Computer Disk: " + $("Disk " + $Dobject.Index) + " " + $([math]::round($DObject.Size/1GB, 3)) + "GB" + " on $Computername"
$Vdisk = "Vcenter: $($vmHardDisk.Name) $($vmHardDisk.capacityGB)" + "GB "
$ComputerDisk = "Computer: " + $("Disk " + $Dobject.Index) + " " + $([math]::round($DObject.Size/1GB, 2)) + "GB"
Write-Host $Vdisk -ForegroundColor Yellow -NoNewline
Write-Host $ComputerDisk -ForegroundColor White
}
}
}
## Author: Parag Waghmare