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)"
...