Bir çalışma arkadaşım içerisinde tam 45 adet VMDK bulunan bir sanal makinenin disk bilgilerini dışa aktarmamızın mümkün olup olmadığını sordu. Özellikle tüm disklerin isimleri ve boyutları gerekiyordu.
Bu tarz ihtiyaçlarda genelde yaptığım gibi önce kısa bir araştırma yaptım. PowerCLI ile bunu gerçekleştirebileceğimi biliyordum ancak işi kolaylaştıracak hazır bir çözüm var mı diye bakmak istedim. Araştırma sırasında başka bir blog yazısında bu senaryo için hazırlanmış oldukça kullanışlı bir fonksiyon buldum.
Ben de bu fonksiyonu kendi scriptime entegre ettim. Script genel olarak üç bölümden oluşuyor:
- vCenter bağlantısı,
- Disk bilgilerini toplayan fonksiyon,
- Çıktının konsola yazdırılması veya CSV olarak export edilmesi,
Aşağıda kullandığım fonksiyonu ve örnek kullanım senaryosunu paylaşıyorum.
Get-VMDisk Fonksiyonu
Bu fonksiyon, parametre olarak aldığı sanal makinelerin tüm disklerini tek tek dolaşarak detaylı bir rapor oluşturur.
Toplanan bilgiler şunlardır:
- VM adı
- Power state
- Diskin bulunduğu datastore
- VMDK dosya adı
- Storage format (Thin, Thick vb.)
- Disk kapasitesi (GB cinsinden)
- Controller bilgisi
- Unit numarası
function Get-VMDisk {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, Position=0, HelpMessage = "VMs to process")]
[ValidateNotNullorEmpty()]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.InventoryItemImpl[]] $myVMs
)
Process {
$View = @()
foreach ($myVM in $myVMs){
$VMDKs = $myVM | get-HardDisk
foreach ($VMDK in $VMDKs) {
if ($VMDK -ne $null){
[int]$CapacityGB = $VMDK.CapacityKB/1024/1024
$Report = [PSCustomObject] @{
Name = $myVM.name
PowerState = $myVM.PowerState
Datastore = $VMDK.FileName.Split(']')[0].TrimStart('[')
VMDK = $VMDK.FileName.Split(']')[1].TrimStart('[')
StorageFormat = $VMDK.StorageFormat
CapacityGB = $CapacityGB
Controller = $VMDK.ExtensionData.ControllerKey -1000
Unit = $VMDK.ExtensionData.UnitNumber
}
$View += $Report
}
}
}
$View | Sort-Object VMname, Controller, Unit
}
}
#Make Connection with vCenter
Try {
if ($Connect) {
Continue
}
else {
$Credential = Get-Credential -UserName "Username" -Message "Provide password."
$Connect = Connect-VIServer "vcenter" -Credential $Credential
Write-Host Connected to $Connect -ForegroundColor Green
}
}
Catch {
$Error
Write-Host Unable to connect to $Connect -ForegroundColor Red
}
#Output to Console
Get-VM "name"| Get-VMDisk | ft -AutoSize
#Export to CSV
Get-VM "name"| Get-VMDisk | Export-Csv -NoTypeInformation -UseCulture -Path "VM-Disks.csv"
#Disconnect vCenter Connection
Disconnect-VIServer *
Fonksiyonun Çalışma Mantığı
Get-HardDiskile ilgili VM üzerindeki tüm diskler çekiliyor.- Disk kapasitesi KB cinsinden geldiği için GB’a dönüştürülüyor.
- Datastore ve VMDK adı, dosya yolundan ayrıştırılıyor.
- Her disk için bir
PSCustomObjectoluşturularak rapor listesine ekleniyor. - Son olarak controller ve unit sırasına göre sıralanmış bir çıktı üretiliyor.
Bu sayede çok diskli makinelerde bile düzenli ve okunabilir bir çıktı elde ediliyor.
vCenter Bağlantısı
Script içerisinde öncelikle vCenter bağlantısı kontrol ediliyor. Eğer mevcut bir bağlantı yoksa kullanıcıdan credential alarak bağlantı kuruluyor.
Try {
if ($Connect) {
Continue
}
else {
$Credential = Get-Credential -UserName "Username" -Message "Provide password."
$Connect = Connect-VIServer "vcenter" -Credential $Credential
Write-Host Connected to $Connect -ForegroundColor Green
}
}
Catch {
$Error
Write-Host Unable to connect to $Connect -ForegroundColor Red
}
Bu yapı sayesinde script tekrar tekrar çalıştırıldığında gereksiz bağlantı denemeleri yapılmamış oluyor.
Çıktıyı Konsolda Görüntüleme
Belirli bir VM’in disk bilgilerini konsolda tablo formatında görmek için;
Get-VM "name" | Get-VMDisk | ft -AutoSize
Bu komut çıktıyı formatlanmış ve okunabilir şekilde gösterir.
CSV Olarak Dışa Aktarma
Disk bilgilerini bir dosyaya aktarmak isterseniz;
Get-VM "name" | Get-VMDisk | Export-Csv -NoTypeInformation -UseCulture -Path "VM-Disks.csv"
Bu sayede Excel’de açılabilir bir rapor elde edebilirsiniz. Özellikle çok diskli veya çok sayıda VM içeren ortamlarda raporlama için oldukça kullanışlıdır.
vCenter Bağlantısını Kapatma
İşlem bittikten sonra bağlantıyı kapatmayı unutmamak iyi bir pratiktir;
Disconnect-VIServer *
Özellikle çok sayıda VMDK içeren sanal makinelerde manuel kontrol yapmak hem zaman kaybettirir hem de hata riskini artırır. PowerCLI ile bu süreci otomatik hale getirerek:
- Tüm diskleri hızlıca listeleyebilir
- Kapasite ve datastore bilgilerini net şekilde görebilir
- Raporlama için CSV çıktısı alabilirsiniz
Kısacası, birkaç satırlık bir script ile ciddi bir operasyonel kolaylık sağlanmış oluyor.
![[TR] VMware PowerCLI ile Sanal Makine Hard Disk Bilgilerini Toplanması](https://kadirkozan.com/wp-content/uploads/2026/02/VMware-logo-featured-1.jpg)
![[TR] VCF Ortamında WLD (Workload Domain) Default Cluster Değiştirme Rehberi](https://kadirkozan.com/wp-content/uploads/2026/03/VCF-Logo-Vertical-150x150.webp)