[TR] VMware PowerCLI ile MAC Adresine Göre Sanal Makine Bulmak

[TR] VMware PowerCLI ile MAC Adresine Göre Sanal Makine Bulmak

VMware vSphere ortamında bazen elinizde yalnızca bir MAC adresi olur ve şu soruya hızlıca cevap vermeniz gerekir:


“Bu MAC hangi sanal makineye ait?”

Bunu GUI üzerinden yapmak çoğu zaman can sıkıcıdır. Özellikle ortam büyükse VM’leri tek tek gezmek, ağ kartlarını kontrol etmek ve eşleşme yakalamaya çalışmak hem zaman kaybettirir hem de hata yapma ihtimalini artırır.

İşte bu küçük PowerCLI script’i tam olarak bu noktada devreye giriyor.

Bu script sayesinde bir dosyada tuttuğunuz MAC adreslerini tek seferde sisteme verip her bir MAC’in hangi VM’de geçtiğini hızlıca raporlayabilirsiniz.

Ne zaman işinize yarar?

Bu tarz bir arama genellikle şu durumlarda karşımıza çıkar:

  • Switch üzerinde bir portta görünen MAC’i hangi VM’in ürettiğini bulmak
  • DHCP, firewall veya NAC loglarında geçen MAC’in kaynağını tespit etmek
  • Güvenlik ya da envanter çalışmasında MAC → VM eşleşmesi çıkarmak
  • Network troubleshooting sırasında “bu cihaz kim?” sorusunu hızla cevaplamak

Script nasıl çalışıyor?

Mantık oldukça basit:

  1. CSV dosyasından MAC adreslerini okur
  2. Bağlı olduğunuz vCenter(lar) üzerindeki VM’leri tarar
  3. Her VM’in network adaptörlerini kontrol eder
  4. MAC adresi eşleşen adaptörü bulursa sonucu toplar
  5. Sonuçları bir TXT dosyasına yazar

1) CSV dosyasını hazırlayınız

Önce bir CSV dosyası oluşturmanız gerekiyor.

Burada kritik nokta şu:

  • CSV’nin ilk satırında mutlaka mac başlığı olmalı
  • MAC adresleri bu kolonun altına yazılmalı
  • Excel kullanıyorsanız genellikle ayraç ; olur (bu yüzden script’te delimiter ;)

Örnek içerik:

mac
00:50:56:AA:BB:CC
00:50:56:11:22:33




2) Script Hazırlanışı

Aşağıdaki script CSV’yi içeri alır, listedeki her MAC için ortamı tarar ve eşleşen VM’i bulur.

$maclist = Import-Csv -Path "C:\mac_list.csv" -Delimiter ";"
$output = ForEach ($mac in $maclist){
    Get-VM | Get-NetworkAdapter | Where {$_.MacAddress -eq $mac.mac} | Select-Object Parent,Name,MacAddress,Uid
}
$output | Out-File -FilePath "C:\mac-vms.txt"




3) Satır satır ne oluyor?

  • Import-Csv ile MAC listesi okunuyor.
  • ForEach döngüsü, listedeki her satırı tek tek ele alıyor.
  • Get-VM ortamınızdaki VM’leri listeliyor. Eğer birden fazla vCenter’a bağlıysanız hepsini kapsar.
  • Get-NetworkAdapter her VM’in ağ kartlarını getiriyor.
  • Where filtresi, adaptörün MAC adresi ile CSV’deki MAC’i karşılaştırıyor.
  • Select-Object ise gereksiz alanları elemek için yalnızca işinize yarayacak bilgileri bırakıyor:
    • Parent: VM’in kendisi (hangi VM olduğunu buradan görürsünüz)
    • Name: Adapter adı (ör. “Network adapter 1”)
    • MacAddress: Eşleşen MAC
    • Uid: vSphere içinde benzersiz kimlik (ileride detay gerekirse işe yarar)

Sonuçlar en sonda mac-vms.txt dosyasına yazdırılıyor.

Dikkat edilmesi gereken noktalar

  • MAC adresi formatı bazen farklı olabilir:
    • 00:50:56:xx:xx:xx (iki noktalı)
    • 00-50-56-xx-xx-xx (tireli)
    • 0050.56xx.xxxx (Cisco formatı)

Eğer format uyuşmazsa script eşleşme bulamaz. Böyle bir durumda MAC adreslerini aynı formata dönüştürerek arama yapmak daha sağlıklı olur.