Files
hInterfaceManager/README.md
2026-04-13 12:56:24 +03:00

230 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# hOLOlu Ag Arayüz Yönetcisi (hInterfaceManager)
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\hInterfaceManager.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\hInterfaceManager.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 `hInterfaceManager.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.
```
hInterfaceManager.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.