# 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](#gereksinimler) - [Kurulum](#kurulum) - [Çalıştırma Yöntemleri](#çalıştırma-yöntemleri) - [Arayüz](#arayüz) - [Özellikler](#özellikler) - [Kod Yapısı](#kod-yapısı) - [Kullanılan PowerShell Cmdlet'leri](#kullanılan-powershell-cmdletleri) - [Bilinen Sınırlamalar](#bilinen-sınırlamalar) - [Sık Karşılaşılan Sorunlar](#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: ```powershell 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: ```batch @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 (`-IncludeHidden` ile 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: ```powershell 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: ```powershell $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 -RunAsAdministrator` direktifi 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-NetAdapter` ve `Get-NetIPAddress` kullandığı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-NetAdapter` komutunu 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: ```powershell 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.