-
Sadrazamv4
instagram:sadrazam.spy Tg:Sadrazamv4
CMD ve PowerShell Kullanımı: Sıfırdan İleri Seviyeye Windows Komut Satırı Rehberi
Giriş
Windows kullanan birçok kişi işletim sistemini yalnızca grafiksel arayüz üzerinden yönetir. Dosya oluşturmak için sağ tıklar, klasörler arasında Dosya Gezgini ile dolaşır, çalışan programları Görev Yöneticisi üzerinden inceler ve ağ ayarlarını menülerden kontrol eder.
Ancak Windows'un arkasında güçlü komut satırı araçları bulunur.
Bunların en önemlileri:
- CMD, yani Command Prompt
- PowerShell
araçlarıdır.
CMD daha eski ve geleneksel bir komut yorumlayıcısıdır. Dosya sistemi işlemleri, temel ağ kontrolleri, sistem bilgisi toplama ve batch script yazımı gibi görevlerde kullanılabilir.
PowerShell ise daha gelişmiş bir otomasyon ve sistem yönetimi platformudur. CMD'nin metin tabanlı yaklaşımından farklı olarak büyük ölçüde nesne tabanlı bir pipeline sistemi kullanır.
Bu eğitimde şu konuları ele alacağız:
- CMD temel kullanımı
- Dosya ve klasör işlemleri
- Ağ komutları
- Process ve servis yönetimi
- Ortam değişkenleri
- Batch scripting
- PowerShell temelleri
- Cmdlet mantığı
- Object pipeline
- Dosya işlemleri
- Process ve servis analizi
- Ağ bağlantılarının incelenmesi
- JSON ve CSV işlemleri
- Fonksiyonlar
- Hata yönetimi
- Script yazımı
- CMD ve PowerShell arasındaki temel farklar
- Sistem yönetimi ve güvenlik analizinde kullanım
Amaç yalnızca komut ezberlemek değildir.
Asıl amaç Windows sistemini terminal üzerinden anlamayı ve yönetmeyi öğrenmektir.
---
1. CMD Nedir?
CMD, Windows işletim sisteminin geleneksel komut satırı yorumlayıcısıdır.
Kullanıcı tarafından yazılan komutları yorumlar ve işletim sistemindeki ilgili programları veya dahili komutları çalıştırır.
CMD açmak için Başlat menüsünde:
cmd
aranabilir.
Açılan terminal genellikle şu yapıda bir prompt gösterir:
C:\Users\User>
Bu satır mevcut çalışma dizinini gösterir.
Burada:
C:
aktif sürücüyü,
\Users\User
ise mevcut klasör yolunu gösterir.
---
2. İlk CMD Komutları
İlk öğrenilmesi gereken komutlardan biri:
echo Hello World
Çıktı:
Hello World
"echo", terminale metin yazdırmak için kullanılabilir.
Ekranı temizlemek için:
cls
CMD sürüm bilgisi için:
ver
Yardım sistemini görmek için:
help
Belirli bir komut hakkında yardım almak için:
dir /?
veya:
copy /?
kullanılabilir.
Komut satırında yardım sistemini kullanmayı öğrenmek önemlidir. Her parametreyi ezberlemek yerine gerektiğinde komutun kendi dokümantasyonuna bakmak daha sürdürülebilir bir yöntemdir.
---
3. Mevcut Dizini Öğrenmek
CMD içerisinde mevcut çalışma dizinini görmek için:
cd
kullanılabilir.
Örnek:
C:\Users\User
"cd", Change Directory anlamına gelir.
Başka bir klasöre geçmek için:
cd Documents
Bir üst klasöre çıkmak için:
cd ..
Doğrudan belirli bir yola gitmek için:
cd /d C:\Windows\System32
Buradaki "/d" parametresi gerektiğinde sürücüyü de değiştirir.
Örneğin mevcut konum C sürücüsündeyken:
cd /d D:\Projects
komutu hem D sürücüsüne geçer hem de Projects klasörünü çalışma dizini yapar.
---
4. Klasör İçeriğini Listelemek
CMD içerisinde dosya ve klasörleri listelemek için:
dir
kullanılır.
Sadece belirli uzantıya sahip dosyaları görmek için:
dir *.txt
Alt klasörler dahil aramak için:
dir *.log /s
Daha sade çıktı için:
dir /b
Buradaki "/b", bare format anlamına gelir.
Örneğin:
notes.txt
report.pdf
Projects
Scripts
gibi sade bir liste oluşturur.
---
5. Klasör Oluşturma ve Silme
Yeni klasör oluşturmak için:
mkdir Project
veya kısa biçimiyle:
md Project
kullanılabilir.
Birden fazla iç içe klasör oluşturmak için:
mkdir Project\src\modules
Boş klasör silmek için:
rmdir Project
veya:
rd Project
kullanılabilir.
Alt klasörleri ve içeriğiyle birlikte silme seçenekleri geri döndürülemez veri kaybına yol açabileceğinden dikkatle kullanılmalıdır. Özellikle yönetici terminalinde çalışırken mevcut dizin ve hedef yol mutlaka kontrol edilmelidir.
---
6. Dosya Oluşturma
Basit bir metin dosyası oluşturmak için output redirection kullanılabilir.
echo Hello World > hello.txt
Bu komut "hello.txt" dosyasını oluşturur ve içine:
Hello World
yazar.
Dosyanın sonuna yeni veri eklemek için:
echo Second Line >> hello.txt
Buradaki fark önemlidir.
>
çıktıyı dosyaya yönlendirir ve mevcut içeriğin üzerine yazabilir.
>>
ise çıktıyı dosyanın sonuna ekler.
---
7. Dosya İçeriğini Görmek
Bir metin dosyasının içeriğini görüntülemek için:
type hello.txt
kullanılabilir.
Uzun çıktıları sayfa sayfa görüntülemek için:
type large_file.txt | more
kullanılabilir.
Buradaki "|" karakteri pipe olarak adlandırılır.
Bir komutun çıktısını başka bir komutun girdisine aktarır.
Temel mantık:
Komut A
|
v
Çıktı
|
v
Komut B
Örnek:
dir | more
Bu komut uzun dizin listesini sayfalar halinde görüntüler.
---
8. Dosya Kopyalama
Dosya kopyalamak için:
copy source.txt backup.txt
Başka bir klasöre kopyalamak için:
copy report.txt C:\Backup\
Dizin yapıları ve daha gelişmiş kopyalama işlemleri için "robocopy" kullanılabilir.
Örneğin bir kaynak klasörü başka bir klasöre kopyalamak için temel kullanım:
robocopy C:\Source D:\Backup
"robocopy", büyük veri kopyalama ve yedekleme senaryolarında klasik "copy" komutundan daha gelişmiş seçenekler sunar.
---
9. Dosya Taşıma ve Yeniden Adlandırma
Dosya taşımak için:
move report.txt C:\Archive\
Dosyanın adını değiştirmek için:
ren old_name.txt new_name.txt
veya:
rename old_name.txt new_name.txt
kullanılabilir.
---
10. Dosya Arama
CMD ile dosya adına göre arama yapılabilir.
Örneğin:
dir C:\Users\*.txt /s /b
Bu komut belirtilen başlangıç dizininin altında ".txt" uzantılı dosyaları recursive olarak listeler.
Burada:
/s
alt dizinleri dahil eder.
/b
sade çıktı verir.
Dosya içeriğinde metin aramak için:
findstr "error" application.log
Case-insensitive arama:
findstr /i "error" application.log
Birden fazla dosyada arama:
findstr /i "failed" *.log
"findstr", log inceleme ve basit metin filtreleme işlemlerinde yararlı olabilir.
---
11. Sistem Bilgilerini Görmek
Windows sistem bilgilerini görüntülemek için:
systeminfo
kullanılabilir.
Bu komut işletim sistemi sürümü, sistem mimarisi ve çeşitli sistem bilgilerini gösterir.
Bilgisayar adını görmek için:
hostname
Mevcut kullanıcıyı görmek için:
whoami
Daha ayrıntılı kullanıcı ve grup bilgileri için:
whoami /all
kullanılabilir.
Bu komut özellikle yetki ve grup üyeliği analizi sırasında faydalıdır.
---
12. Ortam Değişkenleri
CMD içerisinde ortam değişkenleri yüzde işaretleri arasında kullanılır.
Örneğin:
echo %USERNAME%
Kullanıcının ana profil dizini:
echo %USERPROFILE%
Geçici dosya klasörü:
echo %TEMP%
Sistem dizini:
echo %WINDIR%
Tüm ortam değişkenlerini görmek için:
set
kullanılabilir.
Geçici bir değişken oluşturmak için:
set NAME=Ali
Ardından:
echo %NAME%
yazılabilir.
---
13. Process Listeleme
CMD içerisinde çalışan süreçleri görmek için:
tasklist
kullanılır.
Belirli bir süreç adına göre filtreleme:
tasklist /fi "imagename eq notepad.exe"
Belirli bir PID hakkında bilgi aramak için:
tasklist /fi "pid eq 1234"
Buradaki PID değeri örnektir.
Bir süreç hakkında karar verirken yalnızca process adına güvenilmemelidir. Aynı dosya adı farklı konumlarda bulunabilir.
---
14. Ağ Yapılandırmasını Görmek
Ağ bilgileri için en temel komutlardan biri:
ipconfig
Daha ayrıntılı bilgi için:
ipconfig /all
Bu çıktı üzerinden şu bilgiler görülebilir:
- IPv4 adresi
- IPv6 adresi
- Subnet mask
- Default gateway
- DNS server
- DHCP bilgileri
- Ağ adaptörleri
DNS cache görüntülemek için:
ipconfig /displaydns
DNS cache temizlemek için:
ipconfig /flushdns
kullanılabilir.
---
15. Ping Kullanımı
Bir sistemle temel IP bağlantısını test etmek için:
ping example.com
kullanılabilir.
Loopback testi:
ping 127.0.0.1
Belirli sayıda istek göndermek için:
ping -n 4 example.com
Ping sonucunda genellikle:
- Gecikme süresi
- Paket kaybı
- Yanıt durumu
gibi bilgiler görülür.
Ancak bir sistemin ping isteğine cevap vermemesi, sistemin tamamen çevrimdışı olduğunu kesin olarak göstermez. ICMP trafiği güvenlik duvarı tarafından engellenebilir.
---
16. Tracert Kullanımı
Bir hedefe giden ağ yolunu incelemek için:
tracert example.com
kullanılabilir.
Çıktı yaklaşık olarak:
1 Local Gateway
2 ISP Router
3 Transit Router
4 Destination Network
şeklinde düşünülebilir.
Gerçek ağlarda bazı hop noktaları yanıt vermeyebilir. Bu her zaman bağlantı sorunu olduğu anlamına gelmez.
---
17. DNS Sorguları
DNS çözümlemesini incelemek için:
nslookup example.com
kullanılabilir.
Belirli bir DNS sunucusuna sorgu göndermek için:
nslookup example.com 1.1.1.1
Bu tür sorgular DNS sorunlarını teşhis etmek için kullanılabilir.
---
18. Netstat Kullanımı
Aktif ağ bağlantılarını incelemek için:
netstat -ano
kullanılabilir.
Burada:
-a
aktif bağlantıları ve dinleme portlarını gösterir.
-n
adresleri ve portları sayısal biçimde gösterir.
-o
PID bilgisini gösterir.
Örnek:
TCP 192.0.2.10:51520 198.51.100.20:443 ESTABLISHED 4820
Bu çıktıdan PID alınarak:
tasklist /fi "pid eq 4820"
ile bağlantıyı oluşturan süreç araştırılabilir.
Bu, temel sistem analizi için oldukça faydalı bir yöntemdir.
---
19. CMD Pipe ve Filtreleme
CMD'de pipe kullanarak komutlar birleştirilebilir.
Örneğin:
tasklist | findstr /i "python"
Bu komut process listesindeki "python" kelimesini içeren satırları filtreler.
Ağ çıktısında belirli bir durumu aramak için:
netstat -ano | findstr "ESTABLISHED"
kullanılabilir.
Bu yaklaşım basit metin işleme mantığına dayanır.
CMD'nin önemli sınırlarından biri de burada ortaya çıkar: pipeline üzerinden çoğunlukla metin aktarılır.
PowerShell ise nesnelerle çalışabilir.
---
20. Batch Script Nedir?
CMD komutları ".bat" veya ".cmd" dosyaları içerisine yazılarak otomasyon yapılabilir.
Örnek:
@Echo off
echo System Information
hostname
whoami
ipconfig
pause
Buradaki:
@Echo off
komutların kendilerinin ekrana tekrar yazılmasını engeller.
"pause" ise script sonunda kullanıcıdan tuş bekler.
---
21. Batch Değişkenleri
Örnek:
@Echo off
set NAME=User
echo Hello %NAME%
pause
Kullanıcıdan veri almak için:
@Echo off
set /p NAME=Enter your name:
echo Hello %NAME%
pause
Bu şekilde basit interaktif scriptler hazırlanabilir.
---
22. Batch Koşulları
Basit "if" kullanımı:
@Echo off
set STATUS=active
if "%STATUS%"=="active" (
echo System is active
) else (
echo System is not active
)
Değişkenleri tırnak içinde karşılaştırmak, boş değerlerden kaynaklanabilecek bazı sözdizimi sorunlarını azaltabilir.
---
23. Batch Döngüleri
Basit örnek:
@Echo off
for %%F in (*.txt) do (
echo Found file: %%F
)
Bu script mevcut klasördeki ".txt" dosyalarını listeler.
Komut satırında doğrudan kullanıldığında "%F", batch dosyasında ise "%%F" biçimi kullanılır.
Bu ayrım başlangıçta sık karıştırılır.
---
24. PowerShell Nedir?
PowerShell, Windows sistem yönetimi ve otomasyon için geliştirilmiş güçlü bir shell ve scripting ortamıdır.
PowerShell'in CMD'den önemli farklarından biri nesne tabanlı çalışmasıdır.
CMD yaklaşımı çoğunlukla şöyledir:
Komut
|
v
Metin çıktısı
|
v
Metin filtresi
PowerShell yaklaşımı ise şöyledir:
Cmdlet
|
v
Object
|
v
Property Filtering
|
v
Another Object
Bu fark PowerShell'i özellikle otomasyon ve sistem yönetiminde güçlü hale getirir.
---
25. PowerShell Cmdlet Mantığı
PowerShell komutları genellikle:
Verb-Noun
formatındadır.
Örnek:
Get-Process
Get-Service
Get-ChildItem
Get-Content
Set-Location
Bu isimlendirme sistemi komutların daha tahmin edilebilir olmasını sağlar.
---
26. PowerShell Yardım Sistemi
Bir komut hakkında yardım almak için:
Get-Help Get-Process
Daha ayrıntılı yardım:
Get-Help Get-Process -Full
Örnekleri görmek için:
Get-Help Get-Process -Examples
Mevcut komutları araştırmak için:
Get-Command
Belirli kelimeyle arama:
Get-Command *Process*
PowerShell öğrenirken en önemli becerilerden biri komut keşfetmektir.
---
27. PowerShell ile Dizin İşlemleri
Mevcut konumu görmek için:
Get-Location
Klasör değiştirmek için:
Set-Location C:\Users
Kısa kullanım:
cd C:\Users
İçeriği listelemek için:
Get-ChildItem
Kısa kullanım:
ls
veya:
dir
PowerShell bazı tanıdık komut adlarını alias olarak destekler.
Ancak script yazarken okunabilirlik açısından gerçek cmdlet adlarını kullanmak çoğu zaman daha iyidir.
---
28. PowerShell ile Dosya Oluşturmak
Yeni dosya:
New-Item -Path ".\test.txt" -ItemType File
Yeni klasör:
New-Item -Path ".\Project" -ItemType Directory
Dosyaya içerik yazmak:
Set-Content -Path ".\test.txt" -Value "Hello World"
Dosyanın sonuna eklemek:
Add-Content -Path ".\test.txt" -Value "Second Line"
İçeriği okumak:
Get-Content ".\test.txt"
---
29. PowerShell Pipeline
PowerShell'in en güçlü özelliklerinden biri pipeline sistemidir.
Örnek:
Get-Process | Where-Object CPU -gt 10
Burada:
1. "Get-Process" process nesnelerini üretir.
2. Bu nesneler pipeline üzerinden aktarılır.
3. "Where-Object" CPU özelliğine göre filtreleme yapar.
Daha açık biçimde:
Get-Process |
Where-Object {
$_.CPU -gt 10
}
Buradaki:
$_
pipeline içerisindeki mevcut nesneyi temsil eder.
---
30. Nesnelerin Özelliklerini İncelemek
PowerShell'de bir komutun ürettiği nesneleri anlamak için:
Get-Process | Get-Member
kullanılabilir.
Bu komut nesnenin:
- Property
- Method
- Type
bilgilerini gösterir.
Örneğin bir process nesnesinde:
Id
ProcessName
CPU
WorkingSet
StartTime
gibi özellikler bulunabilir.
Bazı özelliklere erişim süreç durumuna veya yetkilere bağlı olarak hata üretebilir.
---
31. Select-Object Kullanımı
Belirli özellikleri seçmek için:
Get-Process |
Select-Object ProcessName, Id, CPU
İlk 10 sonucu almak için:
Get-Process |
Select-Object -First 10
En fazla bellek kullanan süreçleri görmek için:
Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 ProcessName, Id, WorkingSet
Bu komut zinciri PowerShell pipeline mantığının iyi bir örneğidir.
---
32. Where-Object ile Filtreleme
Örneğin çalışan servisleri görmek için:
Get-Service |
Where-Object Status -eq "Running"
Alternatif sözdizimi:
Get-Service |
Where-Object {
$_.Status -eq "Running"
}
Karşılaştırma operatörlerinden bazıları:
-eq eşittir
-ne eşit değildir
-gt büyüktür
-lt küçüktür
-ge büyük veya eşittir
-le küçük veya eşittir
-like wildcard karşılaştırması
-match regex karşılaştırması
Örnek:
Get-Process |
Where-Object {
$_.ProcessName -like "*chrome*"
}
---
33. PowerShell Değişkenleri
PowerShell değişkenleri "$" işaretiyle başlar.
$name = "User"
Yazdırmak için:
Write-Output $name
Sayı:
$count = 10
Array:
$ports = 80, 443, 8080
Eleman erişimi:
$ports[0]
Çıktı:
80
---
34. PowerShell Dizileri
Örnek:
$names = @(
"Ali"
"Ayse"
"Mehmet"
)
Döngü:
foreach ($name in $names) {
Write-Output "User: $name"
}
PowerShell collection işlemlerinde pipeline yaklaşımı da kullanılabilir.
$names | ForEach-Object {
Write-Output "User: $_"
}
---
35. Koşullar
Örnek:
$score = 75
if ($score -ge 80) {
Write-Output "High"
}
elseif ($score -ge 50) {
Write-Output "Medium"
}
else {
Write-Output "Low"
}
PowerShell karşılaştırmalarında klasik ">=" yerine "-ge" gibi operatörler kullanılır.
---
36. Döngüler
For döngüsü:
for ($i = 0; $i -lt 5; $i++) {
Write-Output $i
}
While:
$count = 0
while ($count -lt 5) {
Write-Output $count
$count++
}
Foreach:
$files = Get-ChildItem
foreach ($file in $files) {
Write-Output $file.Name
}
---
37. PowerShell Fonksiyonları
Basit fonksiyon:
function Get-Greeting {
param(
[string]$Name
)
Write-Output "Hello, $Name"
}
Kullanım:
Get-Greeting -Name "User"
Birden fazla parametre:
function Add-Numbers {
param(
[int]$A,
[int]$B
)
return $A + $B
}
Kullanım:
$result = Add-Numbers -A 10 -B 20
---
38. Process Analizi
Processleri görmek için:
Get-Process
Belirli process:
Get-Process -Name notepad
Belirli özellikleri göstermek:
Get-Process |
Select-Object ProcessName, Id, CPU, WorkingSet
CPU değerine göre sıralama:
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10
Bu tür komutlar sistem performans analizi için kullanılabilir.
---
39. Servis Analizi
Tüm servisler:
Get-Service
Çalışan servisler:
Get-Service |
Where-Object Status -eq "Running"
Durdurulmuş servisler:
Get-Service |
Where-Object Status -eq "Stopped"
Bir servisin durumunu görmek için:
Get-Service -Name "Spooler"
Servis yönetimi sistem davranışını etkileyebileceği için değiştirme işlemlerinden önce servisin rolü anlaşılmalıdır.
---
40. Ağ Bağlantılarını İncelemek
Modern Windows sistemlerinde TCP bağlantılarını incelemek için:
Get-NetTCPConnection
Kurulmuş bağlantılar:
Get-NetTCPConnection |
Where-Object State -eq "Established"
Belirli bilgileri seçmek:
Get-NetTCPConnection |
Select-Object LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State,
OwningProcess
Bu çıktıdaki "OwningProcess" değeri PID bilgisidir.
---
41. Ağ Bağlantısını Process ile Eşleştirmek
Örnek:
$connections = Get-NetTCPConnection |
Where-Object State -eq "Established"
foreach ($connection in $connections) {
$process = Get-Process `
-Id $connection.OwningProcess `
-ErrorAction SilentlyContinue
[PSCustomObject]@{
ProcessName = $process.ProcessName
PID = $connection.OwningProcess
RemoteIP = $connection.RemoteAddress
RemotePort = $connection.RemotePort
}
}
Burada "[PSCustomObject]" kullanarak düzenli nesneler oluşturuyoruz.
Bu PowerShell'in en güçlü özelliklerinden biridir.
Metin üretmek yerine yapılandırılmış veri üretebiliriz.
---
42. PSCustomObject Kullanımı
Örnek:
$userInfo = [PSCustomObject]@{
Username = $env:USERNAME
Computer = $env:COMPUTERNAME
Time = Get-Date
}
Görüntülemek için:
$userInfo
Bu nesne daha sonra:
- CSV
- JSON
- Pipeline
- Raporlama
işlemlerinde kullanılabilir.
---
43. CSV Export
Process listesini CSV dosyasına aktarmak için:
Get-Process |
Select-Object ProcessName, Id, CPU |
Export-Csv `
-Path ".\processes.csv" `
-NoTypeInformation
Daha sonra tekrar okumak için:
$data = Import-Csv ".\processes.csv"
CSV formatı tablo tabanlı raporlama için kullanışlıdır.
---
44. JSON İşlemleri
Bir nesneyi JSON formatına çevirmek için:
$data = [PSCustomObject]@{
Computer = $env:COMPUTERNAME
User = $env:USERNAME
Time = Get-Date
}
Ardından:
$data | ConvertTo-Json
Dosyaya yazmak için:
$data |
ConvertTo-Json |
Set-Content ".\report.json"
JSON dosyasını okumak için:
$content = Get-Content ".\report.json" -Raw
Daha sonra:
$object = $content | ConvertFrom-Json
Bu yapı API ve otomasyon projelerinde sık kullanılır.
---
45. Dosya Hash Hesaplama
PowerShell ile bir dosyanın hash değerini hesaplamak için:
Get-FileHash ".\example.exe"
Varsayılan algoritma sistem sürümüne bağlı belgelenmiş davranışla kullanılmalıdır; algoritmayı açıkça belirtmek daha nettir:
Get-FileHash ".\example.exe" -Algorithm SHA256
Çıktı genellikle:
Algorithm
Hash
Path
özelliklerini içerir.
Sadece hash değeri:
(Get-FileHash ".\example.exe" -Algorithm SHA256).Hash
Bu komut dosya bütünlüğü kontrollerinde yararlı olabilir.
---
46. Recursive Dosya Arama
Belirli uzantıyı aramak için:
Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse `
-ErrorAction SilentlyContinue
Sonuçları filtrelemek için:
Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse |
Where-Object Length -gt 10MB
PowerShell dosya boyutu ifadelerini okunabilir biçimde kullanmayı destekler:
1KB
1MB
1GB
Örneğin:
$limit = 100MB
---
47. Select-String ile Log Analizi
Dosya içerisinde metin aramak için:
Select-String `
-Path ".\applica
Giriş
Windows kullanan birçok kişi işletim sistemini yalnızca grafiksel arayüz üzerinden yönetir. Dosya oluşturmak için sağ tıklar, klasörler arasında Dosya Gezgini ile dolaşır, çalışan programları Görev Yöneticisi üzerinden inceler ve ağ ayarlarını menülerden kontrol eder.
Ancak Windows'un arkasında güçlü komut satırı araçları bulunur.
Bunların en önemlileri:
- CMD, yani Command Prompt
- PowerShell
araçlarıdır.
CMD daha eski ve geleneksel bir komut yorumlayıcısıdır. Dosya sistemi işlemleri, temel ağ kontrolleri, sistem bilgisi toplama ve batch script yazımı gibi görevlerde kullanılabilir.
PowerShell ise daha gelişmiş bir otomasyon ve sistem yönetimi platformudur. CMD'nin metin tabanlı yaklaşımından farklı olarak büyük ölçüde nesne tabanlı bir pipeline sistemi kullanır.
Bu eğitimde şu konuları ele alacağız:
- CMD temel kullanımı
- Dosya ve klasör işlemleri
- Ağ komutları
- Process ve servis yönetimi
- Ortam değişkenleri
- Batch scripting
- PowerShell temelleri
- Cmdlet mantığı
- Object pipeline
- Dosya işlemleri
- Process ve servis analizi
- Ağ bağlantılarının incelenmesi
- JSON ve CSV işlemleri
- Fonksiyonlar
- Hata yönetimi
- Script yazımı
- CMD ve PowerShell arasındaki temel farklar
- Sistem yönetimi ve güvenlik analizinde kullanım
Amaç yalnızca komut ezberlemek değildir.
Asıl amaç Windows sistemini terminal üzerinden anlamayı ve yönetmeyi öğrenmektir.
---
1. CMD Nedir?
CMD, Windows işletim sisteminin geleneksel komut satırı yorumlayıcısıdır.
Kullanıcı tarafından yazılan komutları yorumlar ve işletim sistemindeki ilgili programları veya dahili komutları çalıştırır.
CMD açmak için Başlat menüsünde:
cmd
aranabilir.
Açılan terminal genellikle şu yapıda bir prompt gösterir:
C:\Users\User>
Bu satır mevcut çalışma dizinini gösterir.
Burada:
C:
aktif sürücüyü,
\Users\User
ise mevcut klasör yolunu gösterir.
---
2. İlk CMD Komutları
İlk öğrenilmesi gereken komutlardan biri:
echo Hello World
Çıktı:
Hello World
"echo", terminale metin yazdırmak için kullanılabilir.
Ekranı temizlemek için:
cls
CMD sürüm bilgisi için:
ver
Yardım sistemini görmek için:
help
Belirli bir komut hakkında yardım almak için:
dir /?
veya:
copy /?
kullanılabilir.
Komut satırında yardım sistemini kullanmayı öğrenmek önemlidir. Her parametreyi ezberlemek yerine gerektiğinde komutun kendi dokümantasyonuna bakmak daha sürdürülebilir bir yöntemdir.
---
3. Mevcut Dizini Öğrenmek
CMD içerisinde mevcut çalışma dizinini görmek için:
cd
kullanılabilir.
Örnek:
C:\Users\User
"cd", Change Directory anlamına gelir.
Başka bir klasöre geçmek için:
cd Documents
Bir üst klasöre çıkmak için:
cd ..
Doğrudan belirli bir yola gitmek için:
cd /d C:\Windows\System32
Buradaki "/d" parametresi gerektiğinde sürücüyü de değiştirir.
Örneğin mevcut konum C sürücüsündeyken:
cd /d D:\Projects
komutu hem D sürücüsüne geçer hem de Projects klasörünü çalışma dizini yapar.
---
4. Klasör İçeriğini Listelemek
CMD içerisinde dosya ve klasörleri listelemek için:
dir
kullanılır.
Sadece belirli uzantıya sahip dosyaları görmek için:
dir *.txt
Alt klasörler dahil aramak için:
dir *.log /s
Daha sade çıktı için:
dir /b
Buradaki "/b", bare format anlamına gelir.
Örneğin:
notes.txt
report.pdf
Projects
Scripts
gibi sade bir liste oluşturur.
---
5. Klasör Oluşturma ve Silme
Yeni klasör oluşturmak için:
mkdir Project
veya kısa biçimiyle:
md Project
kullanılabilir.
Birden fazla iç içe klasör oluşturmak için:
mkdir Project\src\modules
Boş klasör silmek için:
rmdir Project
veya:
rd Project
kullanılabilir.
Alt klasörleri ve içeriğiyle birlikte silme seçenekleri geri döndürülemez veri kaybına yol açabileceğinden dikkatle kullanılmalıdır. Özellikle yönetici terminalinde çalışırken mevcut dizin ve hedef yol mutlaka kontrol edilmelidir.
---
6. Dosya Oluşturma
Basit bir metin dosyası oluşturmak için output redirection kullanılabilir.
echo Hello World > hello.txt
Bu komut "hello.txt" dosyasını oluşturur ve içine:
Hello World
yazar.
Dosyanın sonuna yeni veri eklemek için:
echo Second Line >> hello.txt
Buradaki fark önemlidir.
>
çıktıyı dosyaya yönlendirir ve mevcut içeriğin üzerine yazabilir.
>>
ise çıktıyı dosyanın sonuna ekler.
---
7. Dosya İçeriğini Görmek
Bir metin dosyasının içeriğini görüntülemek için:
type hello.txt
kullanılabilir.
Uzun çıktıları sayfa sayfa görüntülemek için:
type large_file.txt | more
kullanılabilir.
Buradaki "|" karakteri pipe olarak adlandırılır.
Bir komutun çıktısını başka bir komutun girdisine aktarır.
Temel mantık:
Komut A
|
v
Çıktı
|
v
Komut B
Örnek:
dir | more
Bu komut uzun dizin listesini sayfalar halinde görüntüler.
---
8. Dosya Kopyalama
Dosya kopyalamak için:
copy source.txt backup.txt
Başka bir klasöre kopyalamak için:
copy report.txt C:\Backup\
Dizin yapıları ve daha gelişmiş kopyalama işlemleri için "robocopy" kullanılabilir.
Örneğin bir kaynak klasörü başka bir klasöre kopyalamak için temel kullanım:
robocopy C:\Source D:\Backup
"robocopy", büyük veri kopyalama ve yedekleme senaryolarında klasik "copy" komutundan daha gelişmiş seçenekler sunar.
---
9. Dosya Taşıma ve Yeniden Adlandırma
Dosya taşımak için:
move report.txt C:\Archive\
Dosyanın adını değiştirmek için:
ren old_name.txt new_name.txt
veya:
rename old_name.txt new_name.txt
kullanılabilir.
---
10. Dosya Arama
CMD ile dosya adına göre arama yapılabilir.
Örneğin:
dir C:\Users\*.txt /s /b
Bu komut belirtilen başlangıç dizininin altında ".txt" uzantılı dosyaları recursive olarak listeler.
Burada:
/s
alt dizinleri dahil eder.
/b
sade çıktı verir.
Dosya içeriğinde metin aramak için:
findstr "error" application.log
Case-insensitive arama:
findstr /i "error" application.log
Birden fazla dosyada arama:
findstr /i "failed" *.log
"findstr", log inceleme ve basit metin filtreleme işlemlerinde yararlı olabilir.
---
11. Sistem Bilgilerini Görmek
Windows sistem bilgilerini görüntülemek için:
systeminfo
kullanılabilir.
Bu komut işletim sistemi sürümü, sistem mimarisi ve çeşitli sistem bilgilerini gösterir.
Bilgisayar adını görmek için:
hostname
Mevcut kullanıcıyı görmek için:
whoami
Daha ayrıntılı kullanıcı ve grup bilgileri için:
whoami /all
kullanılabilir.
Bu komut özellikle yetki ve grup üyeliği analizi sırasında faydalıdır.
---
12. Ortam Değişkenleri
CMD içerisinde ortam değişkenleri yüzde işaretleri arasında kullanılır.
Örneğin:
echo %USERNAME%
Kullanıcının ana profil dizini:
echo %USERPROFILE%
Geçici dosya klasörü:
echo %TEMP%
Sistem dizini:
echo %WINDIR%
Tüm ortam değişkenlerini görmek için:
set
kullanılabilir.
Geçici bir değişken oluşturmak için:
set NAME=Ali
Ardından:
echo %NAME%
yazılabilir.
---
13. Process Listeleme
CMD içerisinde çalışan süreçleri görmek için:
tasklist
kullanılır.
Belirli bir süreç adına göre filtreleme:
tasklist /fi "imagename eq notepad.exe"
Belirli bir PID hakkında bilgi aramak için:
tasklist /fi "pid eq 1234"
Buradaki PID değeri örnektir.
Bir süreç hakkında karar verirken yalnızca process adına güvenilmemelidir. Aynı dosya adı farklı konumlarda bulunabilir.
---
14. Ağ Yapılandırmasını Görmek
Ağ bilgileri için en temel komutlardan biri:
ipconfig
Daha ayrıntılı bilgi için:
ipconfig /all
Bu çıktı üzerinden şu bilgiler görülebilir:
- IPv4 adresi
- IPv6 adresi
- Subnet mask
- Default gateway
- DNS server
- DHCP bilgileri
- Ağ adaptörleri
DNS cache görüntülemek için:
ipconfig /displaydns
DNS cache temizlemek için:
ipconfig /flushdns
kullanılabilir.
---
15. Ping Kullanımı
Bir sistemle temel IP bağlantısını test etmek için:
ping example.com
kullanılabilir.
Loopback testi:
ping 127.0.0.1
Belirli sayıda istek göndermek için:
ping -n 4 example.com
Ping sonucunda genellikle:
- Gecikme süresi
- Paket kaybı
- Yanıt durumu
gibi bilgiler görülür.
Ancak bir sistemin ping isteğine cevap vermemesi, sistemin tamamen çevrimdışı olduğunu kesin olarak göstermez. ICMP trafiği güvenlik duvarı tarafından engellenebilir.
---
16. Tracert Kullanımı
Bir hedefe giden ağ yolunu incelemek için:
tracert example.com
kullanılabilir.
Çıktı yaklaşık olarak:
1 Local Gateway
2 ISP Router
3 Transit Router
4 Destination Network
şeklinde düşünülebilir.
Gerçek ağlarda bazı hop noktaları yanıt vermeyebilir. Bu her zaman bağlantı sorunu olduğu anlamına gelmez.
---
17. DNS Sorguları
DNS çözümlemesini incelemek için:
nslookup example.com
kullanılabilir.
Belirli bir DNS sunucusuna sorgu göndermek için:
nslookup example.com 1.1.1.1
Bu tür sorgular DNS sorunlarını teşhis etmek için kullanılabilir.
---
18. Netstat Kullanımı
Aktif ağ bağlantılarını incelemek için:
netstat -ano
kullanılabilir.
Burada:
-a
aktif bağlantıları ve dinleme portlarını gösterir.
-n
adresleri ve portları sayısal biçimde gösterir.
-o
PID bilgisini gösterir.
Örnek:
TCP 192.0.2.10:51520 198.51.100.20:443 ESTABLISHED 4820
Bu çıktıdan PID alınarak:
tasklist /fi "pid eq 4820"
ile bağlantıyı oluşturan süreç araştırılabilir.
Bu, temel sistem analizi için oldukça faydalı bir yöntemdir.
---
19. CMD Pipe ve Filtreleme
CMD'de pipe kullanarak komutlar birleştirilebilir.
Örneğin:
tasklist | findstr /i "python"
Bu komut process listesindeki "python" kelimesini içeren satırları filtreler.
Ağ çıktısında belirli bir durumu aramak için:
netstat -ano | findstr "ESTABLISHED"
kullanılabilir.
Bu yaklaşım basit metin işleme mantığına dayanır.
CMD'nin önemli sınırlarından biri de burada ortaya çıkar: pipeline üzerinden çoğunlukla metin aktarılır.
PowerShell ise nesnelerle çalışabilir.
---
20. Batch Script Nedir?
CMD komutları ".bat" veya ".cmd" dosyaları içerisine yazılarak otomasyon yapılabilir.
Örnek:
@Echo off
echo System Information
hostname
whoami
ipconfig
pause
Buradaki:
@Echo off
komutların kendilerinin ekrana tekrar yazılmasını engeller.
"pause" ise script sonunda kullanıcıdan tuş bekler.
---
21. Batch Değişkenleri
Örnek:
@Echo off
set NAME=User
echo Hello %NAME%
pause
Kullanıcıdan veri almak için:
@Echo off
set /p NAME=Enter your name:
echo Hello %NAME%
pause
Bu şekilde basit interaktif scriptler hazırlanabilir.
---
22. Batch Koşulları
Basit "if" kullanımı:
@Echo off
set STATUS=active
if "%STATUS%"=="active" (
echo System is active
) else (
echo System is not active
)
Değişkenleri tırnak içinde karşılaştırmak, boş değerlerden kaynaklanabilecek bazı sözdizimi sorunlarını azaltabilir.
---
23. Batch Döngüleri
Basit örnek:
@Echo off
for %%F in (*.txt) do (
echo Found file: %%F
)
Bu script mevcut klasördeki ".txt" dosyalarını listeler.
Komut satırında doğrudan kullanıldığında "%F", batch dosyasında ise "%%F" biçimi kullanılır.
Bu ayrım başlangıçta sık karıştırılır.
---
24. PowerShell Nedir?
PowerShell, Windows sistem yönetimi ve otomasyon için geliştirilmiş güçlü bir shell ve scripting ortamıdır.
PowerShell'in CMD'den önemli farklarından biri nesne tabanlı çalışmasıdır.
CMD yaklaşımı çoğunlukla şöyledir:
Komut
|
v
Metin çıktısı
|
v
Metin filtresi
PowerShell yaklaşımı ise şöyledir:
Cmdlet
|
v
Object
|
v
Property Filtering
|
v
Another Object
Bu fark PowerShell'i özellikle otomasyon ve sistem yönetiminde güçlü hale getirir.
---
25. PowerShell Cmdlet Mantığı
PowerShell komutları genellikle:
Verb-Noun
formatındadır.
Örnek:
Get-Process
Get-Service
Get-ChildItem
Get-Content
Set-Location
Bu isimlendirme sistemi komutların daha tahmin edilebilir olmasını sağlar.
---
26. PowerShell Yardım Sistemi
Bir komut hakkında yardım almak için:
Get-Help Get-Process
Daha ayrıntılı yardım:
Get-Help Get-Process -Full
Örnekleri görmek için:
Get-Help Get-Process -Examples
Mevcut komutları araştırmak için:
Get-Command
Belirli kelimeyle arama:
Get-Command *Process*
PowerShell öğrenirken en önemli becerilerden biri komut keşfetmektir.
---
27. PowerShell ile Dizin İşlemleri
Mevcut konumu görmek için:
Get-Location
Klasör değiştirmek için:
Set-Location C:\Users
Kısa kullanım:
cd C:\Users
İçeriği listelemek için:
Get-ChildItem
Kısa kullanım:
ls
veya:
dir
PowerShell bazı tanıdık komut adlarını alias olarak destekler.
Ancak script yazarken okunabilirlik açısından gerçek cmdlet adlarını kullanmak çoğu zaman daha iyidir.
---
28. PowerShell ile Dosya Oluşturmak
Yeni dosya:
New-Item -Path ".\test.txt" -ItemType File
Yeni klasör:
New-Item -Path ".\Project" -ItemType Directory
Dosyaya içerik yazmak:
Set-Content -Path ".\test.txt" -Value "Hello World"
Dosyanın sonuna eklemek:
Add-Content -Path ".\test.txt" -Value "Second Line"
İçeriği okumak:
Get-Content ".\test.txt"
---
29. PowerShell Pipeline
PowerShell'in en güçlü özelliklerinden biri pipeline sistemidir.
Örnek:
Get-Process | Where-Object CPU -gt 10
Burada:
1. "Get-Process" process nesnelerini üretir.
2. Bu nesneler pipeline üzerinden aktarılır.
3. "Where-Object" CPU özelliğine göre filtreleme yapar.
Daha açık biçimde:
Get-Process |
Where-Object {
$_.CPU -gt 10
}
Buradaki:
$_
pipeline içerisindeki mevcut nesneyi temsil eder.
---
30. Nesnelerin Özelliklerini İncelemek
PowerShell'de bir komutun ürettiği nesneleri anlamak için:
Get-Process | Get-Member
kullanılabilir.
Bu komut nesnenin:
- Property
- Method
- Type
bilgilerini gösterir.
Örneğin bir process nesnesinde:
Id
ProcessName
CPU
WorkingSet
StartTime
gibi özellikler bulunabilir.
Bazı özelliklere erişim süreç durumuna veya yetkilere bağlı olarak hata üretebilir.
---
31. Select-Object Kullanımı
Belirli özellikleri seçmek için:
Get-Process |
Select-Object ProcessName, Id, CPU
İlk 10 sonucu almak için:
Get-Process |
Select-Object -First 10
En fazla bellek kullanan süreçleri görmek için:
Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 ProcessName, Id, WorkingSet
Bu komut zinciri PowerShell pipeline mantığının iyi bir örneğidir.
---
32. Where-Object ile Filtreleme
Örneğin çalışan servisleri görmek için:
Get-Service |
Where-Object Status -eq "Running"
Alternatif sözdizimi:
Get-Service |
Where-Object {
$_.Status -eq "Running"
}
Karşılaştırma operatörlerinden bazıları:
-eq eşittir
-ne eşit değildir
-gt büyüktür
-lt küçüktür
-ge büyük veya eşittir
-le küçük veya eşittir
-like wildcard karşılaştırması
-match regex karşılaştırması
Örnek:
Get-Process |
Where-Object {
$_.ProcessName -like "*chrome*"
}
---
33. PowerShell Değişkenleri
PowerShell değişkenleri "$" işaretiyle başlar.
$name = "User"
Yazdırmak için:
Write-Output $name
Sayı:
$count = 10
Array:
$ports = 80, 443, 8080
Eleman erişimi:
$ports[0]
Çıktı:
80
---
34. PowerShell Dizileri
Örnek:
$names = @(
"Ali"
"Ayse"
"Mehmet"
)
Döngü:
foreach ($name in $names) {
Write-Output "User: $name"
}
PowerShell collection işlemlerinde pipeline yaklaşımı da kullanılabilir.
$names | ForEach-Object {
Write-Output "User: $_"
}
---
35. Koşullar
Örnek:
$score = 75
if ($score -ge 80) {
Write-Output "High"
}
elseif ($score -ge 50) {
Write-Output "Medium"
}
else {
Write-Output "Low"
}
PowerShell karşılaştırmalarında klasik ">=" yerine "-ge" gibi operatörler kullanılır.
---
36. Döngüler
For döngüsü:
for ($i = 0; $i -lt 5; $i++) {
Write-Output $i
}
While:
$count = 0
while ($count -lt 5) {
Write-Output $count
$count++
}
Foreach:
$files = Get-ChildItem
foreach ($file in $files) {
Write-Output $file.Name
}
---
37. PowerShell Fonksiyonları
Basit fonksiyon:
function Get-Greeting {
param(
[string]$Name
)
Write-Output "Hello, $Name"
}
Kullanım:
Get-Greeting -Name "User"
Birden fazla parametre:
function Add-Numbers {
param(
[int]$A,
[int]$B
)
return $A + $B
}
Kullanım:
$result = Add-Numbers -A 10 -B 20
---
38. Process Analizi
Processleri görmek için:
Get-Process
Belirli process:
Get-Process -Name notepad
Belirli özellikleri göstermek:
Get-Process |
Select-Object ProcessName, Id, CPU, WorkingSet
CPU değerine göre sıralama:
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10
Bu tür komutlar sistem performans analizi için kullanılabilir.
---
39. Servis Analizi
Tüm servisler:
Get-Service
Çalışan servisler:
Get-Service |
Where-Object Status -eq "Running"
Durdurulmuş servisler:
Get-Service |
Where-Object Status -eq "Stopped"
Bir servisin durumunu görmek için:
Get-Service -Name "Spooler"
Servis yönetimi sistem davranışını etkileyebileceği için değiştirme işlemlerinden önce servisin rolü anlaşılmalıdır.
---
40. Ağ Bağlantılarını İncelemek
Modern Windows sistemlerinde TCP bağlantılarını incelemek için:
Get-NetTCPConnection
Kurulmuş bağlantılar:
Get-NetTCPConnection |
Where-Object State -eq "Established"
Belirli bilgileri seçmek:
Get-NetTCPConnection |
Select-Object LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State,
OwningProcess
Bu çıktıdaki "OwningProcess" değeri PID bilgisidir.
---
41. Ağ Bağlantısını Process ile Eşleştirmek
Örnek:
$connections = Get-NetTCPConnection |
Where-Object State -eq "Established"
foreach ($connection in $connections) {
$process = Get-Process `
-Id $connection.OwningProcess `
-ErrorAction SilentlyContinue
[PSCustomObject]@{
ProcessName = $process.ProcessName
PID = $connection.OwningProcess
RemoteIP = $connection.RemoteAddress
RemotePort = $connection.RemotePort
}
}
Burada "[PSCustomObject]" kullanarak düzenli nesneler oluşturuyoruz.
Bu PowerShell'in en güçlü özelliklerinden biridir.
Metin üretmek yerine yapılandırılmış veri üretebiliriz.
---
42. PSCustomObject Kullanımı
Örnek:
$userInfo = [PSCustomObject]@{
Username = $env:USERNAME
Computer = $env:COMPUTERNAME
Time = Get-Date
}
Görüntülemek için:
$userInfo
Bu nesne daha sonra:
- CSV
- JSON
- Pipeline
- Raporlama
işlemlerinde kullanılabilir.
---
43. CSV Export
Process listesini CSV dosyasına aktarmak için:
Get-Process |
Select-Object ProcessName, Id, CPU |
Export-Csv `
-Path ".\processes.csv" `
-NoTypeInformation
Daha sonra tekrar okumak için:
$data = Import-Csv ".\processes.csv"
CSV formatı tablo tabanlı raporlama için kullanışlıdır.
---
44. JSON İşlemleri
Bir nesneyi JSON formatına çevirmek için:
$data = [PSCustomObject]@{
Computer = $env:COMPUTERNAME
User = $env:USERNAME
Time = Get-Date
}
Ardından:
$data | ConvertTo-Json
Dosyaya yazmak için:
$data |
ConvertTo-Json |
Set-Content ".\report.json"
JSON dosyasını okumak için:
$content = Get-Content ".\report.json" -Raw
Daha sonra:
$object = $content | ConvertFrom-Json
Bu yapı API ve otomasyon projelerinde sık kullanılır.
---
45. Dosya Hash Hesaplama
PowerShell ile bir dosyanın hash değerini hesaplamak için:
Get-FileHash ".\example.exe"
Varsayılan algoritma sistem sürümüne bağlı belgelenmiş davranışla kullanılmalıdır; algoritmayı açıkça belirtmek daha nettir:
Get-FileHash ".\example.exe" -Algorithm SHA256
Çıktı genellikle:
Algorithm
Hash
Path
özelliklerini içerir.
Sadece hash değeri:
(Get-FileHash ".\example.exe" -Algorithm SHA256).Hash
Bu komut dosya bütünlüğü kontrollerinde yararlı olabilir.
---
46. Recursive Dosya Arama
Belirli uzantıyı aramak için:
Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse `
-ErrorAction SilentlyContinue
Sonuçları filtrelemek için:
Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse |
Where-Object Length -gt 10MB
PowerShell dosya boyutu ifadelerini okunabilir biçimde kullanmayı destekler:
1KB
1MB
1GB
Örneğin:
$limit = 100MB
---
47. Select-String ile Log Analizi
Dosya içerisinde metin aramak için:
Select-String `
-Path ".\applica
🔒 Bu içeriği görmek için giriş yapın