Windows Terminal Kurulum ve Özelleştirme Rehberi

Yıllarca klasik PowerShell penceresinde çalışıp “acaba daha iyi bir şey olsa” diye düşünmüşsünüzdür. Windows Terminal tam olarak bu ihtiyaca yanıt veriyor. Microsoft’un 2019’da tanıttığı bu araç, artık Windows 11 ile birlikte varsayılan terminal olarak geliyor ve bir sistem yöneticisi olarak günlük işlerinizi ciddi ölçüde kolaylaştırabilir. Birden fazla sekme, GPU hızlandırmalı rendering, Unicode desteği ve sonsuz özelleştirme seçenekleriyle Windows Terminal, PowerShell scriptleri yazarken veya sunucu yönetimi yaparken hayat kurtarıyor.

Windows Terminal Neden Önemli?

Eski cmd.exe veya klasik PowerShell penceresinin sınırlamalarını düşünün: Renk desteği kısıtlı, çoklu oturum yönetmek zor, kopyala-yapıştır işlemleri sinir bozucu. Windows Terminal tüm bunları çözüyor.

Bir sysadmin olarak günde onlarca PowerShell komutu çalıştırıyorsunuz. Bu komutu şu sunucuda, bunu bu ortamda denerken sekmeler arasında kaybolmak, yanlış pencereye komut girmek, sonra geri dönüp tekrar başlamak… Bunların hepsini yaşadık. Windows Terminal’in sekmeli yapısı ve profil sistemi bu kaosun önüne geçiyor.

Ayrıca WSL (Windows Subsystem for Linux) ile entegrasyonu sayesinde aynı terminal penceresinde hem PowerShell hem de Ubuntu bash oturumu açabiliyorsunuz. Bu özellik başlı başına bir devrim.

Kurulum Yöntemleri

Microsoft Store Üzerinden Kurulum

En basit yöntem Microsoft Store üzerinden kurmak. Ancak kurumsal ortamlarda Store erişimi engellenmiş olabilir.

# winget ile kurulum (Windows Package Manager)
winget install Microsoft.WindowsTerminal

# Preview sürümü için
winget install Microsoft.WindowsTerminal.Preview

GitHub Releases Üzerinden Manuel Kurulum

Store erişimi yoksa veya tam kontrol istiyorsanız GitHub’dan .msixbundle dosyasını indirip PowerShell ile kurabilirsiniz:

# PowerShell ile GitHub'dan son sürümü indirip kurma
$url = "https://github.com/microsoft/terminal/releases/latest"
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/terminal/releases/latest"
$asset = $release.assets | Where-Object { $_.name -like "*.msixbundle" }
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile "WindowsTerminal.msixbundle"
Add-AppxPackage -Path ".WindowsTerminal.msixbundle"

Chocolatey ile Kurulum

Kurumsal ortamlarda Chocolatey kullanıyorsanız:

# Chocolatey ile Windows Terminal kurulumu
choco install microsoft-windows-terminal -y

# Sessiz kurulum için
choco install microsoft-windows-terminal --yes --no-progress

Ayar Dosyasına Hakim Olmak

Windows Terminal’in tüm gücü settings.json dosyasında saklıdır. Bu dosyaya erişmek için terminal içinde Ctrl+, kısayolunu kullanabilir ya da doğrudan yolu açabilirsiniz:

# Ayar dosyasının konumu
# %LOCALAPPDATA%PackagesMicrosoft.WindowsTerminal_8wekyb3d8bbweLocalStatesettings.json

# PowerShell ile dosyayı açma
$settingsPath = "$env:LOCALAPPDATAPackagesMicrosoft.WindowsTerminal_8wekyb3d8bbweLocalStatesettings.json"
notepad $settingsPath

# VS Code ile açmak daha iyi
code $settingsPath

Ayar dosyası JSON formatında ve doğrudan düzenlenebilir. Bir hata yaparsanız terminal size uyarı verir, bu yüzden çekinmeyin.

Temel Ayarlar ve Özelleştirme

Genel Görünüm Ayarları

settings.json içindeki en üst seviye ayarlar genel görünümü kontrol eder:

{
    "$help": "https://aka.ms/terminal-documentation",
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "defaultProfile": "{PowerShell GUID buraya}",
    "copyOnSelect": false,
    "copyFormatting": "none",
    "initialCols": 120,
    "initialRows": 30,
    "launchMode": "maximized",
    "theme": "dark",
    "tabWidthMode": "titleLength",
    "showTabsInTitlebar": true,
    "confirmCloseAllTabs": true
}

copyOnSelect: Seçince otomatik kopyalama. Benim tercihim kapalı, çünkü yanlışlıkla panoya bir şeyler kopyalamak can sıkıcı.

launchMode: maximized yerine focus da kullanabilirsiniz, daha temiz bir görünüm sağlıyor.

initialCols ve initialRows: Script çıktılarında satır kırılmalarını önlemek için 120 kolon iyi bir başlangıç.

Profil Sistemi

Windows Terminal’in en güçlü özelliği profiller. Her ortam için ayrı profil oluşturabilirsiniz: Production sunucuları için kırmızı temalı bir profil, test ortamı için yeşil, local geliştirme için mavi gibi. Bu sayede yanlış ortamda çalıştırdığınızı fark etmemeniz neredeyse imkansız hale geliyor.

{
    "profiles": {
        "defaults": {
            "font": {
                "face": "CaskaydiaCove Nerd Font",
                "size": 11
            },
            "opacity": 95,
            "useAcrylic": true,
            "scrollbarState": "visible",
            "historySize": 9001
        },
        "list": [
            {
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false,
                "colorScheme": "One Half Dark",
                "startingDirectory": "%USERPROFILE%"
            },
            {
                "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
                "name": "PowerShell 7",
                "source": "Windows.Terminal.PowershellCore",
                "colorScheme": "Campbell Powershell",
                "startingDirectory": "%USERPROFILE%"
            }
        ]
    }
}

Üretim Ortamı İçin Uyarı Profili

Gerçek dünyada en çok işe yarayan özelleştirmelerden biri: Production ortamına bağlandığınızda sizi uyaran görsel ipuçları.

{
    "guid": "{production-guid-buraya}",
    "name": "PRODUCTION - SSH",
    "commandline": "ssh admin@prod-server-01",
    "colorScheme": "Solarized Dark",
    "background": "#2d0000",
    "foreground": "#ff6b6b",
    "tabColor": "#cc0000",
    "icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png",
    "bellStyle": ["taskbar", "window"],
    "startingDirectory": null
}

Kırmızı arka plan ile production profilinizi açtığınızda beyniniz otomatik olarak “dikkatli ol” moduna geçiyor. Basit ama etkili.

Oh My Posh ile Prompt Özelleştirme

Windows Terminal güçlü ama varsayılan PowerShell prompt’u çok sade. Oh My Posh kurarak hem görsel açıdan etkileyici hem de bilgi dolu bir prompt elde edebilirsiniz.

# Oh My Posh kurulumu
winget install JanDeBrabandt.OhMyPosh

# Veya PowerShell Gallery üzerinden
Install-Module oh-my-posh -Scope CurrentUser -Force

# Nerd Font kurulumu (Oh My Posh ikonları için şart)
oh-my-posh font install

Nerd Font olmadan ikonlar bozuk çıkıyor. Ben genellikle CaskaydiaCove Nerd Font kullanıyorum, hem okunaklı hem de ikon desteği mükemmel.

# PowerShell profilinize Oh My Posh ekleme
# Profil dosyasını açın
notepad $PROFILE

# Veya yoksa oluşturun
if (!(Test-Path -Path $PROFILE)) {
    New-Item -ItemType File -Path $PROFILE -Force
}

# Profil dosyasına şunu ekleyin:
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATHparadox.omp.json" | Invoke-Expression

Tema seçimi kişisel tercih meselesi. Get-PoshThemes komutuyla mevcut temaları önizleyebilirsiniz. Ben production sunucuları için paradox, local geliştirme için agnoster kullanıyorum.

Terminal İçin PowerShell Modülleri

Windows Terminal ile birlikte bazı PowerShell modülleri kurulumu hayatı çok kolaylaştırıyor:

# PSReadLine - Akıllı otomatik tamamlama
Install-Module PSReadLine -Scope CurrentUser -Force -AllowPrerelease

# Terminal-Icons - Dosya listelerinde ikonlar
Install-Module Terminal-Icons -Repository PSGallery -Force

# z - Sık kullanılan dizinlere hızlı geçiş
Install-Module z -Scope CurrentUser -Force

# PowerShell profilinize ekleyin
Import-Module Terminal-Icons
Import-Module PSReadLine

# Akıllı tamamlama ayarları
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -EditMode Windows

Terminal-Icons modülü ls veya dir çıktısına dosya türüne göre ikonlar ekliyor. İlk kez çalıştırdığınızda “bunu daha önce neden kullanmadım” diyeceksiniz.

Klavye Kısayolları ve Eylemler

Windows Terminal’in kısayol sistemi tamamen özelleştirilebilir. Sık kullandığım kısayollar:

{
    "actions": [
        {
            "command": { "action": "splitPane", "split": "horizontal" },
            "keys": "alt+shift+h"
        },
        {
            "command": { "action": "splitPane", "split": "vertical" },
            "keys": "alt+shift+v"
        },
        {
            "command": { "action": "moveFocus", "direction": "left" },
            "keys": "alt+left"
        },
        {
            "command": { "action": "moveFocus", "direction": "right" },
            "keys": "alt+right"
        },
        {
            "command": { "action": "newTab", "profile": "PowerShell 7" },
            "keys": "ctrl+shift+p"
        },
        {
            "command": { "action": "newTab", "profile": "PRODUCTION - SSH" },
            "keys": "ctrl+shift+r"
        },
        {
            "command": "find",
            "keys": "ctrl+shift+f"
        },
        {
            "command": { "action": "scrollUp", "rowsToScroll": 10 },
            "keys": "ctrl+shift+up"
        }
    ]
}

splitPane özelliği inanılmaz kullanışlı. Bir pencerede bir sunucunun log’unu takip ederken diğer bölümde komut çalıştırabilirsiniz.

Renk Şemaları

Windows Terminal birçok hazır renk şeması ile geliyor ama kendinizinkini de tanımlayabilirsiniz:

{
    "schemes": [
        {
            "name": "SysAdmin Dark",
            "background": "#1a1b26",
            "foreground": "#a9b1d6",
            "cursorColor": "#c0caf5",
            "selectionBackground": "#364a82",
            "black": "#32344a",
            "blue": "#7aa2f7",
            "brightBlack": "#444b6a",
            "brightBlue": "#7da6ff",
            "brightCyan": "#0db9d7",
            "brightGreen": "#73daca",
            "brightPurple": "#bb9af7",
            "brightRed": "#ff7a93",
            "brightWhite": "#acb0d0",
            "brightYellow": "#ff9e64",
            "cyan": "#449dab",
            "green": "#9ece6a",
            "purple": "#ad8ee6",
            "red": "#f7768e",
            "white": "#787c99",
            "yellow": "#e0af68"
        }
    ]
}

Bu Tokyo Night temasına benzer bir şema. Uzun süreli çalışmalarda göz yorgunluğunu azaltıyor.

Gerçek Dünya Senaryoları

Çoklu Sunucu Yönetimi

Diyelim ki sabah işe geldiniz ve 5 farklı sunucunun durumunu kontrol etmeniz gerekiyor. Windows Terminal ile startup script’i oluşturabilirsiniz:

# Start-ServerMonitoring.ps1
# Bu scripti Windows Terminal'in başlangıç komutuna ekleyebilirsiniz

$servers = @(
    @{Name="Web-01"; IP="192.168.1.10"},
    @{Name="DB-01"; IP="192.168.1.20"},
    @{Name="App-01"; IP="192.168.1.30"}
)

function New-ServerTab {
    param($ServerName, $ServerIP)

    $wtArgs = @(
        "new-tab",
        "--title", $ServerName,
        "--profile", "PowerShell 7",
        "powershell", "-NoExit", "-Command",
        "ssh admin@$ServerIP"
    )

    Start-Process wt -ArgumentList $wtArgs
}

foreach ($server in $servers) {
    New-ServerTab -ServerName $server.Name -ServerIP $server.IP
    Start-Sleep -Milliseconds 500
}

Bu script her sunucu için ayrı sekme açıyor ve SSH bağlantısı kuruyor. Sabah rutininiz 5 dakikadan 30 saniyeye iniyor.

Windows Terminal’i Komut Satırından Kontrol Etme

wt komutu oldukça güçlü:

# Yeni sekmede belirli bir komut çalıştırma
wt new-tab --profile "PowerShell 7" powershell -Command "Get-Service | Where-Object Status -eq Running"

# Split pane ile iki komut yan yana
wt new-tab --profile "PowerShell 7" ; split-pane --profile "PowerShell 7" --horizontal

# Belirli bir dizinde terminal açma
wt --startingDirectory "C:Scripts" new-tab --profile "PowerShell 7"

# Başlık ile yeni sekme
wt new-tab --title "Log Monitoring" --profile "PowerShell 7" powershell -NoExit -Command "Get-Content C:Logsapp.log -Wait -Tail 50"

Uzak Sunucu Log Takibi

Gerçek bir senaryo: Production’da sorun var ve birden fazla log dosyasını takip etmeniz gerekiyor:

# Monitor-Logs.ps1
# Windows Terminal'in split pane özelliğini kullanarak çoklu log takibi

param(
    [string]$Server = "prod-web-01",
    [string[]]$LogPaths = @(
        "C:IISLogsW3SVC1current.log",
        "C:AppLogsapplication.log",
        "C:AppLogserror.log"
    )
)

# İlk sekmeyi mevcut oturumda kullan
Write-Host "Log monitoring başlatılıyor: $Server" -ForegroundColor Green

# Her log için split pane aç
$splitArgs = "new-tab --title `"$Server Logs`" --profile `"PowerShell 7`""

foreach ($logPath in $LogPaths) {
    $cmd = "powershell -NoExit -Command `"Write-Host 'Takip ediliyor: $logPath' -ForegroundColor Yellow; Get-Content '$logPath' -Wait -Tail 100`""
    $splitArgs += " ; split-pane --horizontal $cmd"
}

Start-Process wt -ArgumentList $splitArgs

Performans ve Stabilite İpuçları

Uzun süreli kullanımda bazı sorunlarla karşılaşabilirsiniz. İşte bunları önlemenin yolları:

HistorySize ayarı: Varsayılan 9001 satır yeterli ama çok fazla çıktı üretiyorsanız bellek kullanımı artabilir. Dengeyi koruyun.

GPU rendering sorunları: Bazı RDP oturumlarında GPU hızlandırma sorun çıkarabilir. Bunu settings.json’a ekleyerek devre dışı bırakabilirsiniz:

{
    "profiles": {
        "defaults": {
            "rendering": {
                "forceFullRepaint": false,
                "softwareRendering": false
            }
        }
    }
}

RDP üzerinden bağlandığınızda softwareRendering: true yapmanız gerekebilir.

Büyük log çıktıları: Binlerce satır çıktı üretirken terminal yavaşlayabilir. Out-File veya Tee-Object kullanarak çıktıyı dosyaya yönlendirmek daha sağlıklı.

Ekip İçin Standart Konfigürasyon Dağıtımı

Şirketinizde tüm sistem yöneticilerinin aynı Windows Terminal konfigürasyonunu kullanmasını isteyebilirsiniz. Bunu PowerShell ile otomatikleştirebilirsiniz:

# Deploy-TerminalConfig.ps1
# Tüm ekip üyelerine standart Windows Terminal konfigürasyonu dağıtma

[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string[]]$ComputerNames,

    [string]$ConfigSourcePath = "\fileserversysadminWindowsTerminalsettings.json",

    [System.Management.Automation.PSCredential]$Credential
)

$scriptBlock = {
    param($ConfigContent)

    $terminalConfigPath = "$env:LOCALAPPDATAPackagesMicrosoft.WindowsTerminal_8wekyb3d8bbweLocalState"

    if (-not (Test-Path $terminalConfigPath)) {
        Write-Warning "Windows Terminal kurulu degil: $env:COMPUTERNAME"
        return
    }

    # Mevcut konfigi yedekle
    $backupPath = "$terminalConfigPathsettings.json.bak_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
    if (Test-Path "$terminalConfigPathsettings.json") {
        Copy-Item "$terminalConfigPathsettings.json" $backupPath
        Write-Host "Yedek olusturuldu: $backupPath" -ForegroundColor Green
    }

    # Yeni konfigi yaz
    $ConfigContent | Set-Content "$terminalConfigPathsettings.json" -Encoding UTF8
    Write-Host "Konfigurasyon guncellendi: $env:COMPUTERNAME" -ForegroundColor Green
}

$configContent = Get-Content $ConfigSourcePath -Raw

foreach ($computer in $ComputerNames) {
    try {
        $params = @{
            ComputerName = $computer
            ScriptBlock  = $scriptBlock
            ArgumentList = $configContent
        }
        if ($Credential) { $params.Credential = $Credential }

        Invoke-Command @params
        Write-Host "$computer - Tamamlandi" -ForegroundColor Cyan
    }
    catch {
        Write-Error "$computer - Hata: $_"
    }
}

Windows Terminal ve VS Code Entegrasyonu

VS Code ile Windows Terminal entegrasyonu da oldukça değerli. VS Code’un entegre terminalini Windows Terminal olarak ayarlayabilirsiniz:

VS Code settings.json dosyasına:

{
    "terminal.external.windowsExec": "wt",
    "terminal.integrated.defaultProfile.windows": "PowerShell",
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell"
        },
        "Git Bash": {
            "source": "Git Bash"
        }
    }
}

Bu sayede VS Code’dan terminal açtığınızda Windows Terminal’in güçlü özelliklerini kullanabiliyorsunuz.

Sonuç

Windows Terminal, bir sistem yöneticisi için sadece güzel görünen bir terminal emülatörü değil. Doğru yapılandırıldığında günlük iş akışınızı temelden değiştiriyor. Çoklu profil sistemi ile ortam karışıklıklarının önüne geçiyor, split pane ile birden fazla oturumu aynı anda takip edebiliyorsunuz, özelleştirilmiş kısayollarla tekrarlayan işlemleri hızlandırıyorsunuz.

Özellikle üretim ortamı profilleri için renk kodlaması kullanmanızı şiddetle tavsiye ederim. Yanlış ortamda çalıştırılan bir komutun nelere yol açabileceğini hepimiz biliriz. Küçük bir görsel uyarı, büyük felaketlerin önüne geçebilir.

Başlangıç için settings.json dosyasına göz atmak ve birkaç profil oluşturmak yeterli. Zamanla kendi ihtiyaçlarınıza göre şekillendirdikçe, “bunu neden daha önce kullanmadım” dedirten bir araca dönüşüyor. Oh My Posh ve ilgili PowerShell modülleri de cabası. Zaten terminal özelleştirme konusuna girince durmak çok zor, uyarıyorum!

Yorum yapın