README.md Ekle

This commit is contained in:
2026-04-13 12:54:03 +03:00
parent 7201de0350
commit 45b3bf96b7

230
README.md Normal file
View File

@@ -0,0 +1,230 @@
# 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.