User Tools

Site Tools


program_lang:powershell_print_vmscsi

This is an old revision of the document!


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)
            }
            
            $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,SCSIBus,SCSIUnit,SCSIAddress,DiskSizeGB,VmdkPath,ControllerType,Persistence
web-prod-01,Hard Disk 1,0,0,0:0,40.00,[datastore1] web-prod-01/web-prod-01.vmdk,VirtualLsiLogicController,Persistent
web-prod-01,Hard Disk 2,0,1,0:1,100.00,[datastore1] web-prod-01/web-prod-01_1.vmdk,VirtualLsiLogicController,Persistent
db-dev-05,Hard Disk 1,0,0,0:0,60.00,[datastore2] db-dev-05/db-dev-05.vmdk,VirtualSCSIController,Persistent
program_lang/powershell_print_vmscsi.1764279462.txt.gz · Last modified: 2025/11/27 22:37 by manu