Identifiera VMDK kopplingar i vCenter 7
PowerShell-skript för att matcha VMDK-filer med Windows-enheter med servernamn som input
Viktiga insikter
- Automatisk datainsamling: Skriptet hämtar information om virtuella diskar via PowerCLI och Windows-diskar via WMI.
- Matchning baserat på storlek och UUID: Använd diskstorlek som en primär matchningsmetod samt UUID om det är aktiverat i VM-inställningarna.
- Användarvänligt: Skriptet tar servernamn som input och guidar användaren genom anslutning, datahämtning och isolering av resultaten.
Omfattande skriptbeskrivning
Det här PowerShell-skriptet är utformat för att koppla samman VMDK-filer med fysiska disk-enheter i Windows som körs på en virtuell maskin i vCenter 7. Skriptet använder VMware PowerCLI för att ansluta till vCenter, hämta information om den angivna virtuella maskinen och dess associerade hårddiskar samt PowerShell-kommando för att samla information om Windows-diskar genom WMI. Huvudsyftet är att ge en översiktlig mappning mellan VMDK-filer (virtuella diskar) och faktiska diskenheter i Windows.
Steg för steg-process
1. Inmatning och anslutning
Skriptet tar emot två inmatningar: vCenter-serveradress och det specifika virtuella maskinens namn (servernamn). Efter att användaren tillhandahållit dessa uppgifter, används PowerCLI-modulen för att ansluta till vCenter.
2. Hämtning av VMDK-information
När anslutningen är upprättad, hämtas den specificerade virtuella maskinens information. Skriptet extraherar alla VMDK-filer kopplade till maskinen genom att använda kommandot Get-HardDisk. För varje hårddisk extraheras information som filnamn, kapacitet (i GB) och om möjligt UUID genom att använda de interna egenskaperna i $disk.ExtensionData.Backing.
3. Hämtning av Windows-diskar
För att matcha de virtuella diskarna med Windows-enheter används WMI (Win32_DiskDrive) för att hämta information om de fysiska diskarna i Windows-gästen. Här letar skriptet efter attribut såsom DeviceID, SerialNumber och Size.
4. Matchningsstrategi
Matchningen görs huvudsakligen genom att jämföra diskstorleken, vilket är en robust metod om inte två diskar är identiska i storlek. Om VM:s avancerade inställningar har aktiverat disk.EnableUUID är det också möjligt att matcha en virtuell disk med en Windows-disk genom att jämföra UUID mot Windows-diskens serienummer (efter nödvändig formatering, t.ex. ta bort bindestreck).
Det kompletta PowerShell-skriptet
Nedan finns det kompletta skriptet som utför ovan nämnda process. Spara skriptet som en .ps1-fil, exempelvis Match-VMDK-WindowsDisks.ps1, och kör det i PowerShell med nödvändiga administratörsbehörigheter.
#Requires -Modules VMware.PowerCLI
<#
.SYNOPSIS
Skript för att identifiera vilka VMDK-filer som är kopplade till specifika diskenheter i Windows.
.DESCRIPTION
Detta skript ansluter till en vCenter-server, hämtar den angivna virtuella maskinens hårddiskar,
och matchar dem mot Windows-diskar genom diskstorlek och (om möjligt) UUID.
.PARAMETER vCenterServer
Namn eller IP-adress för vCenter-servern.
.PARAMETER VMName
Namn på den virtuella maskinen (servernamn) att undersöka.
#>
param (
[Parameter(Mandatory=$true)]
[string]$vCenterServer,
[Parameter(Mandatory=$true)]
[string]$VMName
)
# Importera VMware PowerCLI modulen
Import-Module VMware.PowerCLI
try {
# Anslut till vCenter
Write-Host "Ansluter till vCenter-server: $vCenterServer..." -ForegroundColor Cyan
Connect-VIServer -Server $vCenterServer -ErrorAction Stop
} catch {
Write-Error "Kunde inte ansluta till vCenter-servern: $vCenterServer. Kontrollera din inmatning."
exit
}
# Hämta VM
$vm = Get-VM -Name $VMName -ErrorAction SilentlyContinue
if (-not $vm) {
Write-Error "Den virtuella maskinen '$VMName' hittades inte."
Disconnect-VIServer -Server $vCenterServer -Confirm:$false
exit
}
Write-Host "Found VM: $VMName" -ForegroundColor Green
# Hämta VMDK-diskar för VM
$hardDisks = Get-HardDisk -VM $vm
if (-not $hardDisks) {
Write-Error "Inga hårddiskar hittades för maskinen '$VMName'."
Disconnect-VIServer -Server $vCenterServer -Confirm:$false
exit
}
# Hämta Windows-diskinformation via WMI
# Här antas att skriptet körs på Windows-gästen eller att WMI är tillgängligt över nätverket.
# Du kan behöva administratörsbehörighet och korrekt konfiguration av fjärr-WMI.
try {
Write-Host "Hämtar Windows-diskinformation via WMI..." -ForegroundColor Cyan
$windowsDisks = Get-WmiObject -Class Win32_DiskDrive -ComputerName $VMName -ErrorAction Stop
} catch {
Write-Warning "Kunde inte hämta diskdata via WMI från '$VMName'. Se till att den nödvändiga åtkomsten finns."
$windowsDisks = @()
}
# Array för att lagra matchningsresultat
$result = @()
foreach ($disk in $hardDisks) {
$vmdkPath = $disk.Filename
$diskSizeGB = $disk.CapacityGB
$diskUUID = ""
# Försök hämta UUID om det existerar (kräver disk.EnableUUID)
try {
$diskUUID = $disk.ExtensionData.Backing.Uuid
} catch {
$diskUUID = "Ej tillgänglig"
}
$matchedWinDisk = $null
# Matchning via diskstorlek
foreach ($winDisk in $windowsDisks) {
$winDiskSizeGB = [math]::Round($winDisk.Size / 1GB, 2)
if ($winDiskSizeGB -eq $diskSizeGB) {
$matchedWinDisk = $winDisk
break
}
}
$resultObj = [PSCustomObject]@{
VMDK_File = $vmdkPath
VMDK_Size_GB = $diskSizeGB
VMDK_UUID = $diskUUID
Windows_Device= if ($matchedWinDisk) { $matchedWinDisk.DeviceID } else { "Ingen matchning" }
Windows_Model = if ($matchedWinDisk) { $matchedWinDisk.Model } else { "Ingen matchning" }
Windows_Size_GB = if ($matchedWinDisk) { [math]::Round($matchedWinDisk.Size/1GB,2) } else { 0 }
}
$result += $resultObj
}
# Visa resultatet i en tabell
Write-Host "`nMatchningsresultat:" -ForegroundColor Green
$result | Format-Table -AutoSize
# Alternativ: Exportera resultatet till CSV
#$result | Export-Csv -Path "DiskMapping_$VMName.csv" -NoTypeInformation
# Koppla från vCenter-servert
Disconnect-VIServer -Server $vCenterServer -Confirm:$false
Write-Host "`nSkriptklart. Kontrollera resultatet ovan." -ForegroundColor Cyan
Översiktlig tabell med skriptets funktioner
| Steg | Beskrivning | Nyckelkommandon/Metoder |
|---|---|---|
| 1. Inmatning & Anslutning | Användaren matar in vCenter-server och VM-namn. Ansluter till vCenter med Connect-VIServer. | Connect-VIServer, Read-Host, Param() |
| 2. Hämta VMDK Information | Hämtar information om VMDK-filer och deras egenskaper (Storlek, UUID, sökväg). | Get-VM, Get-HardDisk |
| 3. Hämta Windows Disk Information | Använder WMI (Win32_DiskDrive) för att hämta information om Windows-diskar. | Get-WmiObject |
| 4. Matchning | Matchar VMDK med Windows-disk baserat på diskstorlek och evt. UUID om tillgängligt. | Loopen, kontrollstrukturer, Format-Table |
| 5. Resultat | Visar en tabell med mappningsresultat och ger möjlighet att exportera data. | Format-Table, Export-Csv (valfritt) |
Referenser
- Match Windows Disks to VMWare VMDK Files - Woshub
- Matching Windows Disks to VMware VMDK Files - Virtual Allan
- Map VMware Virtual Disks and Windows Drive Volumes - 4SysOps
- Powershell or PowerCLI VMDK-to-DriveLetter - Stack Overflow
- Identifying mapping of Windows Disks to VMware VMDK Files - PChawda
Rekommenderade sökfrågor
Last updated March 5, 2025