Hyper-V Ortamında Powershell ile Snapshot Kontrolü

Sanal altyapı yönetiminde en kritik konulardan biri, snapshot (checkpoint) takibidir. Hyper-V ortamlarında snapshot’lar (veya checkpoint’ler), bir sanal makinenin mevcut durumunun anlık bir kopyasını alarak yedekleme, test veya güncelleme öncesi geri dönüş imkânı sunar.

Bu özellik son derece kullanışlı olmakla birlikte, zamanında silinmeyen snapshot’lar ciddi sorunlara yol açabilir:

  • Disk alanı hızla tükenir,
  • Performans düşüşü yaşanır,
  • Yedekleme veya replikasyon senaryolarında tutarsızlıklar oluşabilir.

Özellikle çok düğümlü (multi-node) Hyper-V Cluster yapılarında yüzlerce sanal makineyi yönetmek, snapshot durumlarını tek tek kontrol etmekle neredeyse imkânsız hale gelir. İşte tam bu noktada PowerShell otomasyonu devreye giriyor.

Bu yazıda paylaşacağım PowerShell script, tüm cluster’ları, host’ları ve VM’leri otomatik olarak tarayarak hangi sanal makinelerde snapshot bulunduğunu raporlayan pratik bir çözüm sunuyor.

Çözümün Amacı

Hazırlanan bu PowerShell script’in temel amacı, yöneticilere merkezi bir görünürlük sağlayarak Hyper-V altyapısındaki snapshot durumunu kolayca raporlayabilmektir.

Script şu adımları gerçekleştirir:

  1. Hyper-V ortamındaki tüm cluster ve host’ları otomatik olarak dolaşır,
  2. Her bir sanal makine üzerinde snapshot olup olmadığını kontrol eder,
  3. Eğer snapshot varsa, adı, oluşturulma tarihi ve türüyle birlikte listeler,
  4. Snapshot yoksa bunu da raporda açıkça belirtir,
  5. Sonuçları ekranda tablo olarak gösterir veya isteğe bağlı olarak CSV formatında dışa aktarır.

Bu sayede sistem yöneticileri, ortamda unutulmuş veya eski snapshot’ları kolayca tespit ederek depolama alanlarını optimize edebilir ve altyapı performansını artırabilir.

Script’in Çalışma Mantığı

Script, temelde dört aşamada çalışıyor:

Cluster Tanımlama

İlk olarak, kontrol edilecek Hyper-V cluster isimleri $Clusters dizisi içerisinde belirtilir.
Birden fazla cluster’ı aynı anda kontrol etmek mümkündür.

Node (Host) Keşfi

Her bir cluster içerisindeki tüm host’lar Get-ClusterNode komutuyla otomatik olarak çekilir.
Bu sayede, yapıda kaç node olursa olsun manuel listelemeye gerek kalmaz.

Sanal Makine (VM) Listeleme

Her host üzerinde bulunan tüm VM’ler Get-VM komutuyla sorgulanır.

Snapshot (Checkpoint) Kontrolü

Her VM için Get-VMCheckpoint komutu çalıştırılır ve:

  • Snapshot varsa, adı, oluşturulma tarihi ve türü rapora eklenir,
  • Snapshot yoksa, “None” bilgisiyle rapora boş bir kayıt eklenir.

Tüm veriler $Report adlı bir listeye toplanır ve işlem tamamlandığında tablo olarak görüntülenir veya CSV’ye aktarılabilir.

Gereksinimler ve Yetkilendirme

  • Scriptin doğru çalışabilmesi için Script’in çalıştırıldığı kullanıcı hesabının Hyper-V yönetim yetkilerine sahip olması gerekir.
  • Get-ClusterNode, Get-VM, Get-VMCheckpoint komutlarını çalıştırabilmek için Hyper-V Administrator veya Cluster Administrator hakları gerekir.

Kullanacağımız PowerShell Scripti aşağıda yer almaktadır.

# Enter the names of the Hyper-V Clusters or Hosts to check $Clusters = @(“ClusterName1″,”ClusterName2″,”ClusterName3”) # List to store results $Report = @() foreach ($Cluster in $Clusters) { try { # Get all nodes within the cluster $Nodes = Get-ClusterNode -Cluster $Cluster -ErrorAction Stop foreach ($Node in $Nodes) { # Retrieve all VMs from the host $VMs = Get-VM -ComputerName $Node.Name -ErrorAction Stop foreach ($VM in $VMs) { # Check if the VM has any snapshots $Checkpoints = Get-VMCheckpoint -VMName $VM.Name -ComputerName $Node.Name -ErrorAction SilentlyContinue if ($Checkpoints) { foreach ($CP in $Checkpoints) { $Report += [PSCustomObject]@{ Cluster = $Cluster Host = $Node.Name VMName = $VM.Name Checkpoint = $CP.Name CreatedTime = $CP.CreationTime SnapshotType = $CP.SnapshotType } } } else { $Report += [PSCustomObject]@{ Cluster = $Cluster Host = $Node.Name VMName = $VM.Name Checkpoint = “None” CreatedTime = “-” SnapshotType = “-” } } } } } catch { Write-Warning “Error: Unable to connect to cluster $Cluster. $_” } } # Display report on screen $Report | Format-Table -AutoSize # Export to CSV $Report | Export-Csv “C:CheckpointHyperV_Snapshot_Report.csv” -NoTypeInformation -Encoding UTF8

Script tamamlandığında ekranda aşağıdakine benzer bir tablo görüntülenecektir.

ClusterHostVMNameCheckpointCreatedTimeSnapshotTypeClusterName1HVNODE01DC01PrePatch_Snapshot15/10/2025 12:34StandardClusterName2HVNODE02SQL01None––ClusterName3HVNODE03WebSrv01Monthly_Checkpoint02/09/2025 09:12Standard

Bu tablo sayesinde hangi sanal makinelerde snapshot bulunduğunu, ne zaman oluşturulduğunu kolayca görebilirsiniz.

Kullanım Senaryoları

Bu script özellikle aşağıdaki durumlarda oldukça kullanışlı olacaktır.

  • Geniş Hyper-V altyapılarında snapshot denetimi yapmak isteyen sistem yöneticileri,
  • Periyodik bakım öncesi VM’lerde snapshot alınıp alınmadığını doğrulamak,
  • Otomatik temizlik öncesinde snapshot envanteri çıkarmak,
  • Yedekleme öncesi raporlama yapmak veya uyumluluk (compliance) denetimlerinde belgelemek.

Sonuç

Bu PowerShell script, Hyper-V altyapınızda snapshot (checkpoint) yönetimini otomatikleştirerek zamandan tasarruf etmenizi ve manuel hataları ortadan kaldırmanızı sağlar. Artık hangi sanal makinelerde snapshot olduğunu, ne zaman oluşturulduğunu veya hangi türde olduğunu saniyeler içinde öğrenebilirsiniz.

Ayrıca, ISO 27001 gibi bilgi güvenliği yönetim sistemleri kapsamında istenebilecek snapshot denetim kayıtları için de standart ve tekrarlanabilir bir raporlama yöntemi sunar.Bu sayede, snapshot yaşam döngüsü (oluşturma, izleme, silme) süreçleri kayıt altına alınarak hem operasyonel yönetim hem de uyumluluk (compliance) tarafında sürdürülebilirlik sağlanır.

Unutulan snapshot’lardan kaynaklanabilecek performans düşüşleri, disk doluluk problemleri veya yedekleme tutarsızlıklarını önlemenin en etkili yolu, bu tür otomasyon çözümlerini günlük yönetim rutinlerine entegre etmektir.

Kısacası, bu çözüm yalnızca bir raporlama aracı değil; aynı zamanda altyapı kararlılığı, veri bütünlüğü ve operasyonel verimlilik için stratejik bir adımdır.

Bu bilginin, sistem yöneticileri için pratikte fark yaratacak şekilde faydalı olmasını dilerim…