Bu PowerShell betiği, Windows hizmetlerini yönetmek için kullanıcı dostu bir menü arayüzü sunar.
Aşağıda betiğin ana işlevleri ve özellikleri özetlenmiştir:
Betiğin Özellikleri:
Kullanıcı Menüsü:
Betik, kullanıcıya çeşitli seçenekler sunan bir menü ile başlar. Kullanıcı, hizmetleri listeleme, istatistik gösterme, dosya oluşturma, yeni hizmet oluşturma, mevcut bir hizmeti silme ve oluşturulan/silinen hizmetleri listeleme gibi işlemleri gerçekleştirebilir.
Hizmetleri Listeleme:
List-Services fonksiyonu, sistemdeki tüm Windows hizmetlerini ad, görünür ad ve durum bilgileri ile birlikte listeler.
Hizmet İstatistikleri:
Show-Service-Stats fonksiyonu, çalışan, durdurulan ve devre dışı bırakılmış hizmetlerin sayısını gösterir.
Hizmetleri Dosyaya Kaydetme:
Save-ServicesToFile fonksiyonu, mevcut hizmetleri bir CSV dosyasına kaydeder. Dosya, kullanıcının masaüstünde oluşturulur.
Yeni Hizmet Oluşturma:
Create-New-Service fonksiyonu, kullanıcıdan hizmetin görünür adı, teknik adı ve çalıştırılacak .exe dosyasının yolunu alarak yeni bir Windows hizmeti oluşturur. Ayrıca, hizmetin başlatma türünü (otomatik, manuel, devre dışı) seçme imkanı sunar.
Hizmet Silme:
Delete-Service fonksiyonu, kullanıcıdan silmek istediği hizmetin görünür adını alır ve onay aldıktan sonra hizmeti siler. Silinen hizmetler, bir diziye kaydedilir.
Oluşturulan ve Silinen Hizmetleri Listeleme:
List-CreatedAndDeletedServices fonksiyonu, daha önce oluşturulan ve silinen hizmetlerin listesini gösterir.
Yönetici İzni Kontrolü:
Betik, yönetici olarak çalıştırılıp çalıştırılmadığını kontrol eder ve eğer yönetici izni yoksa kullanıcıyı uyarır.
Kullanım:
Kullanıcı, betiği çalıştırdıktan sonra menüden bir seçenek seçerek işlemlerini gerçekleştirebilir. Her işlemden sonra kullanıcıdan devam etmek için bir tuşa basması istenir.
Bu betik, Windows hizmetlerini yönetmek isteyen kullanıcılar için pratik bir araçtır ve sistem yöneticileri için faydalıdır.
KOD İÇERİĞİ :
Kod: Tümünü seç
$logFile = [System.IO.Path]::Combine($env:USERPROFILE, "Masaüstü", "Windows Hizmet Listesi.txt")
$deletedServices = @()
# Kullanıcı menüsünü yazdırma
function Show-Menu {
cls
Write-Host "Merhaba WindowsPC Kullanıcısı, ne yapmak istiyorsun...!!!"
Write-Host "1 : Windows Hizmetlerini Listele"
Write-Host "2 : Windows Hizmetleri İstatistiği Göster"
Write-Host "3 : Windows Hizmet Listesi.txt Dosyasını Oluştur"
Write-Host "4 : Sıfırdan Windows Hizmeti Oluştur"
Write-Host "5 : Sistemde Mevcut Bir Hizmeti SİL"
Write-Host "6 : Oluşturulan ve Silinen Hizmetleri Listele"
Write-Host "0 : Çıkış"
}
# Windows hizmetlerini listele
function List-Services {
cls
Get-Service | Format-Table -Property Name, DisplayName, Status
}
# Hizmet istatistiklerini göster
function Show-Service-Stats {
cls
$services = Get-Service
$running = ($services | Where-Object { $_.Status -eq 'Running' }).Count
$stopped = ($services | Where-Object { $_.Status -eq 'Stopped' }).Count
$disabled = ($services | Where-Object { $_.StartType -eq 'Disabled' }).Count
Write-Host "Çalışan Hizmet Sayısı: $running"
Write-Host "Çalışmayan Hizmet Sayısı: $stopped"
Write-Host "Devredışı Bırakılmış Hizmet Sayısı: $disabled"
}
# Hizmetleri masaüstüne kaydet
function Save-ServicesToFile {
cls
# Dosya yolunun varlığını kontrol et
if (-not (Test-Path -Path $logFile)) {
New-Item -Path $logFile -ItemType File
}
$services = Get-Service
$services | Select-Object DisplayName, Status | Export-Csv -Path $logFile -NoTypeInformation
Write-Host "Windows hizmetleri masaüstüne kaydedildi: $logFile"
}
# Yeni bir hizmet oluştur
function Create-New-Service {
cls
$displayName = Read-Host "Oluşturacağınız Windows Hizmetinin GÖRÜNEN ADI"
$serviceName = Read-Host "Oluşturacağınız Windows Hizmetinin TEKNİK ADI"
$exePath = Read-Host "Oluşturduğunuz Windows Hizmetinin Bağlı Olacağı .exe Dosyasının Tam Yolunu Yazınız"
# Başlatma türünü seçme: A (Automatic), M (Manual), D (Disabled)
Write-Host "Başlatma Türü Seçiniz:"
Write-Host "A: Automatic"
Write-Host "M: Manual"
Write-Host "D: Disabled"
$startTypeInput = Read-Host "Başlatma türünü (A/M/D) girin"
# Başlatma türünü doğrula
switch ($startTypeInput.ToUpper()) {
'A' { $startType = 'Automatic' }
'M' { $startType = 'Manual' }
'D' { $startType = 'Disabled' }
default {
Write-Host "Geçersiz giriş! Lütfen 'A', 'M' veya 'D' seçeneklerinden birini seçin."
return
}
}
try {
# Hizmeti oluşturma komutu
New-Service -Name $serviceName -DisplayName $displayName -Binary $exePath -StartupType $startType
Write-Host "Windows Servisi başarılı bir şekilde oluşturuldu"
}
catch {
Write-Host "Hizmet oluşturulurken bir hata oluştu: $_"
}
}
# Hizmet silme
function Delete-Service {
cls
$services = Get-Service | Sort-Object DisplayName
$services | ForEach-Object { Write-Host "$($_.DisplayName)" }
# Kullanıcıdan silmek istediği servisin Görünen Adını al
$serviceToDelete = Read-Host "Silinmesi İstenen Windows Hizmetinin Görünen Adı"
# Görünür adı ile teknik adı eşleştir
$service = $services | Where-Object { $_.DisplayName -eq $serviceToDelete }
if ($service) {
$confirmation = Read-Host "EMİN MİSİNİZ? (evet/hayır)"
if ($confirmation -eq "evet" -or $confirmation -eq "e") {
try {
# Hizmeti sc.exe ile silme (teknik adı kullanarak)
sc.exe delete $service.Name
Write-Host "Windows servisi silindi."
$deletedServices += $serviceToDelete
}
catch {
Write-Host "Hizmet silinirken bir hata oluştu: $_"
}
} else {
Write-Host "İşlem iptal edildi kullanıcı tarafından."
}
} else {
Write-Host "Belirtilen hizmet bulunamadı!"
}
}
# Oluşturulan ve silinen hizmetleri listele
function List-CreatedAndDeletedServices {
cls
Write-Host "Oluşturulmuş ve silinmiş hizmetler:"
$deletedServices | ForEach-Object { Write-Host $_ }
}
# Yönetici izni kontrolü
function Check-Administrator {
$isAdmin = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
return $isAdmin.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
# Ana Menü döngüsü
do {
if (-not (Check-Administrator)) {
Write-Host "Yönetici olarak çalıştırılmadınız! Lütfen betiği yönetici olarak çalıştırın."
break
}
Show-Menu
$selection = Read-Host "Seçiminizi yapınız"
switch ($selection) {
1 { List-Services }
2 { Show-Service-Stats }
3 { Save-ServicesToFile }
4 { Create-New-Service }
5 { Delete-Service }
6 { List-CreatedAndDeletedServices }
0 { Write-Host "Çıkıyor..." }
default { Write-Host "Geçersiz seçim, tekrar deneyin." }
}
Read-Host "Devam etmek için Enter'a basın..."
} while ($selection -ne 0)
$logFile = [System.IO.Path]::Combine($env:USERPROFILE, "Masaüstü", "Windows Hizmet Listesi.txt")
Yukarıdaki kod satırında mavi ile işaretlenmiş sistem klasörünü siz kendi sisteminize göre başka bir sistem dizini adı yazabilirsiniz.Örneğin, Belgelerim dizini için "Belgelerim" şeklinde yazmak gibi.....Böylece .txt dosyasının kayıt yerini değiştirmiş olursunuz.
EKRAN GÖRÜNTÜLERİ : (Sistem : MS-WindowsOS Yapı 22H2 x64 Home TR)
Betiğin Ana DOS Menüsü:

Sıfırdan Windows Hizmeti/Servisi Oluşturma:

Sıfırdan Oluşturulan Windows Servisinin Sistem'den Silinmesi :
