VMware vSphere ortamlarında ağ tarafı genellikle en kritik ve en dikkat gerektiren alanlardan biridir. Yeni bir cluster kurarken mevcut yapıya yeni bir VLAN eklerken ya da staging/test ortamı hazırlarken çoğu zaman aynı network konfigürasyonunu birden fazla VMware ESXi host üzerinde birebir oluşturmanız gerekir.
Eğer ortamınızda Standard vSwitch kullanıyorsanız her host’un ağ yapılandırması kendi üzerinde tutulur. Bu da şu anlama gelir.
Bir değişiklik yapmanız gerekiyorsa bunu her host üzerinde ayrı ayrı yapmalısınız.
3 host varsa sorun değil.
Ama 15–20 host varsa?
İşte bu noktada PowerCLI devreye girer. Amacımız;
- Belirli host’ları seçmek,
- Hepsinde aynı isimde bir Standard vSwitch oluşturmak,
- VLAN’ları ve Portgroup’ları merkezi bir listeden tanımlamak,
- Daha önce oluşturulmuş yapıları tekrar oluşturmamak,
- Script’i güvenle tekrar çalıştırabilir hale getirmek,
Senaryoyu Netleştirelim
Diyelim ki;
- Birden fazla cluster var (ör. cluster1, cluster2, cluster3…)
- Belirli isim desenine sahip host’lar hedeflenecek,
- Tüm bu host’larda “StagingSwitch” adında bir Standard vSwitch oluşturulacak,
- Portgroup’lar ve VLAN ID’leri bir CSV dosyasından okunacak,
- Eğer portgroup zaten varsa tekrar oluşturulmayacak,
Amacımız tüm host’larda aynı network yapısını standardize etmek.
Adım 1: Hedef Host’ları Belirlemek
$firsthosts = get-cluster cluster1*,cluster2*,cluster3*,cluster4* |
Get-VMHost |
Where {$_.Name -like "*name*"}
Bu bölüm aslında en kritik adımdır.
Burada:
- Belirli cluster’ları wildcard (*) kullanarak seçiyoruz.
- Bu cluster’lardaki tüm ESXi host’ları alıyoruz.
- Host isimlerine göre ek bir filtre uyguluyoruz.
Bu yaklaşım sayesinde:
- Yanlışlıkla tüm ortamı etkilemezsiniz.
- Sadece hedeflediğiniz host’larda işlem yaparsınız.
- Büyük ortamlarda kontrollü ilerlersiniz.
Adım 2: Standard vSwitch Oluşturmak
foreach ($node in $firsthosts){
New-VirtualSwitch -VMHost $node -Name "StagingSwitch"
}
Bu döngü seçilen her host üzerinde aynı isimde bir Standard vSwitch oluşturur.
Burada önemli bir nokta var:
Eğer vSwitch zaten varsa komut hata verir.
Kurumsal ortamlarda genellikle önce “var mı?” kontrolü yapılması önerilir. Ancak ilk kurulum senaryosunda bu basit yapı yeterlidir.
Adım 3: Portgroup ve VLAN Yapısını Merkezi Bir CSV’den Yönetmek
Manuel olarak portgroup eklemek yerine, tüm VLAN listesini bir CSV dosyasında tutmak çok daha sürdürülebilir bir yöntemdir.
$portgroups = Import-Csv -Path "C:\portgrouplist.csv" -Delimiter ";"
Örnek CSV İçeriği
Name;VlanNumber
portgroup1;1
portgroup2;2
portgroup5;5
portgroup101;101
portgroup210;210
Bu yaklaşımın avantajı şudur:
- Yeni VLAN eklemek için script’e dokunmanız gerekmez.
- Sadece CSV’ye yeni satır eklersiniz.
- Network ekibiyle ortak çalışma kolaylaşır.
- Versiyon kontrolü yapılabilir.
Adım 4: Portgroup’ları Oluşturma (Kontrollü ve Güvenli Şekilde)
foreach ($portgroup in $portgroups){
foreach ($node in $firsthosts){
if (Get-VMHost $node |
Get-VirtualSwitch -Standard -Name "StagingSwitch" |
Get-VirtualPortGroup |
Where-Object {$_.Name -eq $portgroup.Name}){
Write-Host "Portgroup $($portgroup.Name) already exists on $node!" -ForegroundColor Cyan
} else {
Get-VMHost $node |
Get-VirtualSwitch -Standard -Name "StagingSwitch" |
New-VirtualPortGroup -Name $portgroup.Name -VLanId $portgroup.VlanNumber | Out-Null
Write-Host "Portgroup $($portgroup.Name) Created on $node!" -ForegroundColor Green
}
}
}
Bu bölümde iç içe iki döngü vardır:
- Dış döngü → CSV’deki her portgroup için
- İç döngü → Her host için
Mantık basittir ama güçlüdür:
Her VLAN için her host’u kontrol et →
Portgroup varsa geç →
Yoksa oluştur.
#Create Standard vSwitch
$firsthosts = get-cluster cluster1*,cluster2*,cluster3*,cluster4* | Get-VMHost | Where {$_.Name -like "*name*"}
foreach ($node in $firsthosts){
New-VirtualSwitch -VMHost $node -Name "StagingSwitch"
}
#Import Portgroup Table
$portgroups = Import-Csv -Path "C:\portgrouplist.csv" -Delimiter ";"
#Create all Portgroups from Table $portgroups
$firsthosts = get-cluster cluster1*,cluster2*,cluster3*,cluster4* | Get-VMHost | Where {$_.Name -like "*name*"}
foreach ($portgroup in $portgroups){
foreach ($node in $firsthosts){
if (Get-VMHost $node | Get-VirtualSwitch -Standard -Name "StagingSwitch" | Get-VirtualPortGroup | Where-Object {$_.Name -eq $portgroup.Name}){
Write-Host Portgroup $portgroup.Name already exists on $node! -ForegroundColor Cyan
} else {
Get-VMHost $node | Get-VirtualSwitch -Standard -Name "StagingSwitch" | New-VirtualPortGroup -Name $portgroup.Name -VLanId $portgroup.VlanNumber | Out-Null
Write-Host Portgroup $portgroup.Name Created on $node! -ForegroundColor Green
}
}
}
Bu script “idempotent” çalışır. Yani:
- Script’i tekrar tekrar çalıştırabilirsiniz.
- Mevcut yapı bozulmaz.
- Yalnızca eksik olanlar oluşturulur.
- Ortam standardize edilir.
Bu özellikle büyük kurumsal ortamlarda kritik bir yaklaşımdır.
![[TR] VMware PowerCLI ile Birden Fazla VMware ESXi Host Üzerinde Standard vSwitch Oluşturmak](https://kadirkozan.com/wp-content/uploads/2026/02/VMware-logo-featured-1.jpg)