# Yönetici kontrolü if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning "Lütfen scripti yönetici olarak çalıştırın!" exit } Write-Host "SQL Server temizlik scripti başlatıldı..." -ForegroundColor Cyan # Windows Installer COM nesnesi $installer = New-Object -ComObject WindowsInstaller.Installer # SQL Server servislerini durdur Get-Service | Where-Object { $_.Name -match "MSSQL" } | ForEach-Object { Stop-Service $_.Name -Force -ErrorAction SilentlyContinue } # SQL ile ilgili MSI dosyalarını tarama $msiFiles = Get-ChildItem "C:\Windows\Installer" -Filter *.msi -Recurse -ErrorAction SilentlyContinue $sqlMSIs = @() foreach ($file in $msiFiles) { try { $database = $installer.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $null, $installer, @($file.FullName, 0)) $view = $database.GetType().InvokeMember("OpenView", "InvokeMethod", $null, $database, ("SELECT `Value` FROM `Property` WHERE `Property`='ProductName'")) $view.GetType().InvokeMember("Execute", "InvokeMethod", $null, $view, $null) $record = $view.GetType().InvokeMember("Fetch", "InvokeMethod", $null, $view, $null) if ($record -ne $null) { $productName = $record.GetType().InvokeMember("StringData", "GetProperty", $null, $record, 1) if ($productName -match "SQL") { $sqlMSIs += $file.FullName } } } catch { } } # Silent uninstall foreach ($msiPath in $sqlMSIs) { Start-Process -FilePath "msiexec.exe" -ArgumentList "/x `"$msiPath`" /quiet /norestart" -Wait } # Registry temizliği $regPaths = @( "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server", "HKLM:\SOFTWARE\Microsoft\MSSQLServer", "HKLM:\SYSTEM\CurrentControlSet\Services\MSSQL*", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Microsoft SQL Server", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer" ) foreach ($path in $regPaths) { Remove-Item $path -Recurse -Force -ErrorAction SilentlyContinue } # Program Files klasörleri $folders = @( "C:\Program Files\Microsoft SQL Server", "C:\Program Files (x86)\Microsoft SQL Server" ) foreach ($folder in $folders) { if (Test-Path $folder) { Remove-Item $folder -Recurse -Force -ErrorAction SilentlyContinue } } Write-Host "SQL Server artıkları temizlendi. Bilgisayarı yeniden başlatın." -ForegroundColor Green