====== VMware print VM SCSI id ======
Powershell script
# Connexion à vCenter
# Remplacez "vcenter.vlab.local" par l'adresse de votre vCenter
# Connect-VIServer -Server "vcenter.vlab.local"
# --- Définition de la fonction pour collecter les données ---
function Get-VMDiskInfo {
param(
[Parameter(Mandatory=$true)]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl[]]$VMs
)
$Report = @()
foreach ($vm in $VMs) {
# Récupère tous les contrôleurs de disque SCSI et les disques
$Disks = Get-HardDisk -VM $vm
foreach ($disk in $Disks) {
# Extraction des informations clés
$DiskController = $disk.Parent
$SCSIController = $disk.ScsiController
# L'adresse SCSI est composée du Bus (ou contrôleur) et du Unit Number (ou Target ID)
# C'est l'équivalent du "Host:Bus:Target:LUN" pour les disques physiques ou du "Bus:Target:LUN"
# C'est ce qui correspond au format type lsscsi [h:c:t:l]
$SCSIAddress = "$($disk.ScsiController.BusNumber):$($disk.UnitNumber)"
# Obtention du chemin du VMDK
$VmdkPath = $disk.FileName
# Création de l'objet de résultat
$DiskInfo = [PSCustomObject]@{
VMName = $vm.Name
DiskLabel = $disk.Name # ex: Hard Disk 1
SCSIAddressVMX = "scsi$VirtualDeviceNode"
SCSIBus = $disk.ScsiController.BusNumber # ex: 0 ou 1
SCSIUnit = $disk.UnitNumber # ex: 0, 1, 2...
SCSIAddress = $SCSIAddress # Format Bus:Unit (équivalent c:t:l)
DiskSizeGB = [Math]::Round($disk.CapacityGB, 2) # Taille du disque en GB
VmdkPath = $VmdkPath # Chemin complet du fichier VMDK
ControllerType= $SCSIController.Type # Type de contrôleur (e.g., VirtualLsiLogicController)
Persistence = $disk.Persistence # Type de persistance (e.g., Persistent)
OS_Linux_Suggest = "/dev/sdX (Lsscsi: [0:$($disk.ScsiController.BusNumber):$($disk.UnitNumber):0])"
OS_Windows_Hint = "Disque X (Location: Port $($disk.ScsiController.BusNumber), Target $($disk.UnitNumber))"
}
$Report += $DiskInfo
}
}
return $Report
}
# --- Exécution et affichage des résultats ---
# 1. Option A: Pour toutes les VMs de vCenter
#$AllVMs = Get-VM
#$Result = Get-VMDiskInfo -VMs $AllVMs
# 2. Option B: Pour une seule VM (décommenter et remplacer le nom)
# $SingleVM = Get-VM "NomDeVotreVM"
# $Result = Get-VMDiskInfo -VMs $SingleVM
# Affichage du résultat dans la console
$Result | Format-Table -AutoSize
# Exportation vers un fichier CSV (Optionnel)
# $Result | Export-Csv -Path "C:\Temp\VM_Disk_Report.csv" -NoTypeInformation
=== Output: ===
"VMName","DiskLabel","SCSIAddressVMX","SCSIBus","SCSIUnit","DiskSizeGB","VmdkPath","OS_Linux_Suggest","OS_Windows_Hint"
"web-prod-01","Hard Disk 1","scsi0:0","0","0","40.00","[datastore1] web-prod/web-prod.vmdk","/dev/sda (Lsscsi: [0:0:0:0])","Disque 0 (Location: Port 0, Target 0)"
"web-prod-01","Hard Disk 2","scsi0:1","0","1","100.00","[datastore1] web-prod/web-prod_1.vmdk","/dev/sdb (Lsscsi: [0:0:1:0])","Disque 1 (Location: Port 0, Target 1)"
...