230 lines
9.9 KiB
Markdown
230 lines
9.9 KiB
Markdown
# 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. |