9.9 KiB
NetworkManager.ps1
Windows ağ adaptörlerini görsel arayüz üzerinden listelemeye, etkinleştirmeye ve devre dışı bırakmaya yarayan bir PowerShell GUI aracı.
İçindekiler
- Gereksinimler
- Kurulum
- Çalıştırma Yöntemleri
- Arayüz
- Özellikler
- Kod Yapısı
- Kullanılan PowerShell Cmdlet'leri
- Bilinen Sınırlamalar
- Sık Karşılaşılan Sorunlar
Gereksinimler
| Gereksinim | Detay |
|---|---|
| İşletim Sistemi | Windows 10 / Windows 11 |
| PowerShell | 5.1 veya üzeri (Windows ile birlikte gelir) |
| .NET Framework | 4.x (Windows ile birlikte gelir) |
| Yetki | Yönetici (Administrator) zorunlu |
Kurulum
Script tek dosyadan oluşur, kurulum gerektirmez. Sabit ve erişimi kolay bir klasöre kopyalamak yeterli:
C:\Scripts\NetworkManager.ps1
Çalıştırma Yöntemleri
1. PowerShell konsolundan
PowerShell'i Yönetici olarak çalıştır ile açın, ardından:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\NetworkManager.ps1
2. Sağ tıkla çalıştır
Dosyaya sağ tıklayın → PowerShell ile çalıştır seçin. Windows UAC yetki yükseltme penceresi açacaktır.
3. Masaüstü kısayolu (önerilen)
Adım 1: Masaüstüne sağ tıklayın → Yeni → Kısayol
Adım 2: Hedef olarak aşağıdakini yazın:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Scripts\NetworkManager.ps1"
Adım 3: Kısayola sağ tıklayın → Özellikler → Gelişmiş → Yönetici olarak çalıştır kutusunu işaretleyin.
Adım 4 (isteğe bağlı): Özellikler penceresinde Kısayol tuşu alanına tıklayıp istediğiniz kombinasyonu atayın (örn. Ctrl + Alt + N).
Not: Klavye kısayolu yalnızca kısayol dosyası masaüstünde durduğu sürece her yerden çalışır.
4. .bat dosyası ile
Script'in bulunduğu klasöre NetworkManager.bat adında bir dosya oluşturun:
@echo off
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File "%~dp0NetworkManager.ps1"
Bu .bat dosyasına sağ tıklayıp kısayol oluşturun, kısayol özelliklerinden Gelişmiş → Yönetici olarak çalıştır seçeneğini etkinleştirin.
Arayüz
┌─────────────────────────────────────────────────────────────────┐
│ Ag Arayuzu Yoneticisi ADMIN │ ← Başlık (koyu lacivert)
├──────────┬──────────────────┬────────┬─────────┬───────┬───────┤
│ Arayüz │ Açıklama │ Durum │ Tip │ MAC │ IPv4 │ ← Sütun başlıkları
├──────────┼──────────────────┼────────┼─────────┼───────┼───────┤
│ Ethernet │ Intel(R) I225-V │ Etkin │Ethernet │ AA:BB │ 192.. │
│ Wi-Fi │ Realtek 802.11ac │ Etkin │ Wi-Fi │ CC:DD │ 10.. │
│ Bluetooth│ BT Device (PAN) │Dev.Dışı│Bluetooth│ - │ - │
│ vEthernet│ Hyper-V vSwitch │ Etkin │ Hyper-V │ EE:FF │ 172.. │
├──────────┴──────────────────┴────────┴─────────┴───────┴───────┤
│ [ Etkinleştir ] [ Devre Dışı ] [ Yenile ] │ ← Buton paneli
├─────────────────────────────────────────────────────────────────┤
│ Seçili: Ethernet | Etkin | IPv4: 192.168.1.100 │ ← Durum çubuğu
└─────────────────────────────────────────────────────────────────┘
Renk kodları
| Renk | Anlam |
|---|---|
| Yeşil metin | Adaptör durumu: Etkin (Up) |
| Kırmızı metin | Adaptör durumu: Devre dışı (Disabled) |
| Gri metin | Bağlı değil / Mevcut değil |
| Yeşil buton arka planı | Etkinleştir eylemi |
| Kırmızı buton arka planı | Devre Dışı Bırak eylemi |
Özellikler
Listeleme
- Sistemdeki tüm ağ adaptörleri listelenir (
-IncludeHiddenile gizli/sanal adaptörler dahil) - Her adaptör için şu bilgiler gösterilir: Arayüz Adı, Açıklama, Durum, Tip, MAC Adresi, IPv4, IPv6
- IPv6 adresleri global ve link-local (fe80) olarak ayrıştırılır; link-local adresler
(LL)etiketi ile işaretlenir - Adaptörler isme göre alfabetik sıralanır
Etkinleştir / Devre Dışı Bırak
- Listeden bir adaptör seçip Etkinleştir veya Devre Dışı butonuna tıklanır
- Devre dışı bırakmadan önce onay kutusu gösterilir
- İşlem tamamlandıktan sonra liste otomatik yenilenir
- Çift tıklama ile toggle yapılır: etkinse devre dışı bırakır, devre dışıysa etkinleştirir
Yenile
- Yenile butonu adaptör listesini ve IP adreslerini güncel verilerle yeniden yükler
Durum çubuğu
- Uygulama genelinde bilgi mesajları gösterir
- Seçili adaptörün adı, durumu ve IP adresleri anlık olarak görüntülenir
Kod Yapısı
Script tek dosyadan oluşur ve bölümler yorum satırları ile ayrılmıştır.
NetworkManager.ps1
│
├── Renkler & Fontlar → Tüm renk ve font tanımları
│
├── Ana Form → System.Windows.Forms.Form yapılandırması
│
├── TableLayoutPanel (3 satır)
│ ├── Satır 0 – pnlTop → Başlık (48px) + Sütun başlıkları (24px)
│ ├── Satır 1 – ListView → Adaptör listesi (kalan alan, Dock=Fill)
│ └── Satır 2 – pnlBottom → Butonlar (56px) + Durum çubuğu (26px)
│
├── Load-Adapters() → Adaptörleri sorgular ve ListView'e ekler
│ ├── Get-NetAdapter → Adaptör bilgileri
│ └── Get-NetIPAddress → IP adresleri (InterfaceIndex ile eşleştirilir)
│
├── SelectedIndexChanged → Seçim değişince durum çubuğunu günceller
│
├── btnEnable.Click → Enable-NetAdapter çağırır
├── btnDisable.Click → Onay → Disable-NetAdapter çağırır
├── btnRefresh.Click → Load-Adapters() çağırır
└── lv.DoubleClick → Duruma göre Enable/Disable toggle yapar
Layout mimarisi
Windows Forms'da Dock çakışmasını önlemek için TableLayoutPanel tercih edilmiştir. Satır yükseklikleri şöyle tanımlanmıştır:
Satır 0 → SizeType::Absolute, 72px # Başlık + sütun başlıkları
Satır 1 → SizeType::Percent, 100% # Liste (form yeniden boyutlandırılınca esner)
Satır 2 → SizeType::Absolute, 82px # Butonlar + durum çubuğu
Bu yapı sayesinde form boyutu değiştiğinde yalnızca liste alanı büyür/küçülür; başlık ve buton panelleri sabit kalır.
SubItems.Add hatası ve çözümü
ListView.Items.Add() ve SubItems.Add() metodları ListViewItem nesnesi döndürür. PowerShell pipeline'ı bu dönüş değerini System.Object[] olarak sarmaladığında sonraki Add çağrısıyla tip çakışması oluşur. Çözüm olarak tüm .Add() çağrıları | Out-Null ile sonlandırılmış, değerler [string] cast'ı ile kesin olarak stringe dönüştürülmüştür:
$row.SubItems.Add([string]$a.InterfaceDescription) | Out-Null
Kullanılan PowerShell Cmdlet'leri
| Cmdlet | Amaç |
|---|---|
Get-NetAdapter -IncludeHidden |
Tüm ağ adaptörlerini listeler (gizli/sanal dahil) |
Get-NetIPAddress |
Adaptöre atanmış IP adreslerini döndürür |
Enable-NetAdapter |
Seçili adaptörü etkinleştirir |
Disable-NetAdapter |
Seçili adaptörü devre dışı bırakır |
Bilinen Sınırlamalar
- Yönetici yetkisi zorunludur.
#Requires -RunAsAdministratordirektifi ile zorunlu tutulmuştur; yönetici yetkisi olmadan script çalışmaz. - IP adresleri anlık değildir. IP bilgileri Yenile butonuna basılana kadar liste yüklendiğindeki değerleri gösterir. DHCP yenileme gibi sonradan gerçekleşen değişiklikler otomatik yansımaz.
- Yalnızca Windows. Script
System.Windows.Forms,Get-NetAdapterveGet-NetIPAddresskullandığından yalnızca Windows 10/11 üzerinde çalışır. - WAN Miniport adaptörleri devre dışı bırakılamaz. Bu adaptörler sistem tarafından yönetilir ve
Disable-NetAdapterkomutunu reddeder; hata mesajı gösterilir.
Sık Karşılaşılan Sorunlar
Script çalışmıyor, hata veriyor
ExecutionPolicy kısıtlaması olabilir. PowerShell'i yönetici olarak açıp şunu çalıştırın:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Türkçe karakterler bozuk görünüyor
Script UTF-8 BOM ile kaydedilmiştir. Dosyayı farklı bir editörde açıp yeniden kaydederseniz BOM kaybolabilir. Notepad++, VS Code veya PowerShell ISE ile açarken encoding'in UTF-8 with BOM olduğundan emin olun.
Bazı adaptörler listede görünmüyor
Get-NetAdapter -IncludeHidden çalışıyor olmalı. Bazı eski Windows sürümlerinde -IncludeHidden parametresi desteklenmeyebilir; script bu durumu try/catch ile yönetir ve parametresiz komutu dener.
Etkinleştir/Devre Dışı butonu hata veriyor
Seçili adaptörün zaten o durumda olup olmadığını kontrol edin. WAN Miniport ve Loopback gibi sistem adaptörleri değiştirilemez.