
Илюстрация, създадена с помощта на Photoshop и AI инструменти от AiFlux (Тони Ангелчовски).
Аз съм предимно Linux потребител и рядко използвам Windows в ежедневието си.
Затова създадох този PowerShell скрипт.
Сега, с този скрипт, мога да превърна нова Windows инсталация в по-чиста, защитена и персонализирана среда за минути.
Но това не е инструмент само за хора като мен, които рядко използват Windows .
Независимо дали настройвате виртуална машина за конкретни задачи или просто искате да оптимизирате текущата си Windows инсталация, този скрипт може да бъде удобното решение, което търсите.
Защо PowerShell е Идеалният Инструмент?
PowerShell ви дава пълен контрол върху настройките на Windows, без да се налага да използвате приложения от трети страни.
Да деактивирате услуги и телеметрия, които събират данни.
Да блокирате реклами и проследяване.
Да конфигурирате защитната стена и антивируса.
Да оптимизирате производителността, като изключите ненужни програми при стартиране.
Какво Ще Постигнем с Този Скрипт?
Скриптът е създаден така, че да:
Подобри поверителността, като минимизира събирането на данни от Microsoft.
Подобри сигурността, като активира силни настройки за защитната стена и Windows Defender.
Повиши производителността чрез премахване на ненужни стартиращи приложения и услуги.
Автоматизира почистването на диска и настройките на браузъра Microsoft Edge.
Основни Настройки, Които Скриптът Прави
- Деактивиране на Телеметрия и Проследяване

Телеметрията събира данни за използването на системата. Скриптът намалява това до минимално ниво, достъпно за вашето издание на Windows. - Оптимизация на Стартиращите Програми

Програмите, които се стартират автоматично с Windows, често забавят системата. Скриптът автоматично премахва ненужните. - Подобряване на Microsoft Edge

Edge е добър браузър, но настройките му по подразбиране позволяват проследяване и събиране на данни. Скриптът активира защита срещу проследяване и изключва автоматичното синхронизиране. - Конфигуриране на Защитната Стена

Настройките на защитната стена блокират всички входящи връзки, като позволяват само тези, които са изрично поискани от системата. - Автоматично Почистване на Диска

Премахва временни файлове, ненужни системни файлове и други отпадъци.
Как да Стартирате Скрипта?
- Копирайте Скрипта
Запазете скрипта като .ps1 файл, например ==> Secure-Windows11-Enhanced.ps1 - Стартирайте PowerShell като Администратор
Натиснете Start
, въведете "PowerShell", щракнете с десния бутон и изберете Run as Administrator. 
- Изпълнете Скрипта
Въведете следните команди:
PHP:Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force .\Secure-Windows11-Enhanced.ps1 - Рестартирайте Компютъра

След като скриптът завърши, рестартирайте системата, за да приложите всички промени.
Често Задавани Въпроси
- Ще повлияе ли скриптът на Windows Update?
Не. Скриптът запазва активността на Windows Update, но намалява събирането на данни. - Мога ли да използвам скрипта на Windows Home?
Да, но някои настройки като пълния контрол върху телеметрията са достъпни само в Windows Pro. - Как мога да върна промените?
Можете да възстановите настройките с тези команди:
PHP:netsh advfirewall reset Set-MpPreference -DisableRealtimeMonitoring $false
Заключение
С този PowerShell скрипт можете лесно да трансформирате Windows 11 в по-ефективна, защитена и дискретна система. Настройките са гъвкави и могат да бъдат персонализирани според вашите нужди.
Скриптът: Secure-Windows11.ps1
Свалете или копирайте този скрипт и го изпълнете, за да оптимизирате своята Windows 11 система:Свали от ТуК
UPDATE 03.03.2026
PHP:
#Requires -RunAsAdministrator
<#
Script Name: Secure-Windows11-Enhanced.ps1
Description: Comprehensive PowerShell script to optimize Windows 11
for privacy, security, and performance.
Author : AiFlux (Toni Angelchovski) toni.linux@gmail.com
Version : 2.0
Requirements: Windows 11, PowerShell 5.1+, Run as Administrator
CHANGELOG v2.0:
- Fixed Section 3: startup app disable now uses registry, not file delete
- Fixed Section 4: corrected Edge policy registry paths (HKLM Policies)
- Fixed Section 8: removed MAPS/SampleConsent (privacy contradiction)
- Added Section 11: Disable Advertising ID & Activity History
- Added Section 12: Disable Cortana & Search telemetry
- Added Section 13: Disable unnecessary scheduled tasks
- Added Section 14: DNS over HTTPS (DoH) via registry
- Added error handling throughout
- Added summary report at the end
#>
# ============================================================
# HELPERS
# ============================================================
function Write-Section {
param([string]$Title)
Write-Host ""
Write-Host ("=" * 60) -ForegroundColor DarkCyan
Write-Host " $Title" -ForegroundColor Cyan
Write-Host ("=" * 60) -ForegroundColor DarkCyan
}
function Set-RegValue {
param(
[string]$Path,
[string]$Name,
$Value,
[string]$Type = "DWord"
)
try {
if (-not (Test-Path $Path)) {
New-Item -Path $Path -Force | Out-Null
}
Set-ItemProperty -Path $Path -Name $Name -Value $Value -Type $Type -Force
Write-Host " [OK] $Name = $Value ($Path)" -ForegroundColor Green
} catch {
Write-Host " [FAIL] $Name ($Path) — $($_.Exception.Message)" -ForegroundColor Red
}
}
function Disable-Svc {
param([string]$Name)
try {
$svc = Get-Service -Name $Name -ErrorAction Stop
if ($svc.Status -ne "Stopped") { Stop-Service -Name $Name -Force -ErrorAction SilentlyContinue }
Set-Service -Name $Name -StartupType Disabled -ErrorAction Stop
Write-Host " [OK] Service disabled: $Name" -ForegroundColor Green
} catch {
Write-Host " [SKIP] Service not found: $Name" -ForegroundColor DarkGray
}
}
function Disable-Task {
param([string]$Path, [string]$Name)
try {
Disable-ScheduledTask -TaskPath $Path -TaskName $Name -ErrorAction Stop | Out-Null
Write-Host " [OK] Task disabled: $Name" -ForegroundColor Green
} catch {
Write-Host " [SKIP] Task not found: $Name" -ForegroundColor DarkGray
}
}
$Results = [System.Collections.Generic.List[string]]::new()
# ============================================================
# SECTION 1: SYSTEM CHECK & INFORMATION
# ============================================================
Write-Section "SECTION 1: System Check"
$winVer = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion")
$windowsEdition = $winVer.EditionID
$buildNumber = $winVer.CurrentBuildNumber
Write-Host " Edition : $windowsEdition"
Write-Host " Build : $buildNumber"
$isPro = $windowsEdition -match "Professional|Enterprise|Education"
$isHome = $windowsEdition -match "Home"
if ($isHome) {
Write-Host " NOTE: Some Group Policy tweaks require Pro/Enterprise." -ForegroundColor Yellow
}
$Results.Add("System: $windowsEdition (Build $buildNumber)")
# ============================================================
# SECTION 2: DISABLE TELEMETRY & DATA COLLECTION
# ============================================================
Write-Section "SECTION 2: Telemetry & Data Collection"
# Works on all editions via registry
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" "AllowTelemetry" 0
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection" "AllowTelemetry" 0
# Connected User Experiences (UTC)
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" "DisableOneSettingsDownloads" 1
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" "DoNotShowFeedbackNotifications" 1
# Disable feedback hub
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Siuf\Rules" "NumberOfSIUFInPeriod" 0
# Telemetry services
foreach ($svc in @("DiagTrack", "dmwappushservice", "WerSvc", "wercplsupport")) {
Disable-Svc $svc
}
$Results.Add("Telemetry: Disabled")
# ============================================================
# SECTION 3: OPTIMIZE STARTUP APPLICATIONS [FIXED]
# ============================================================
Write-Section "SECTION 3: Startup Applications"
# FIX: Disable via registry Run keys, NOT by deleting executable files
$excludedApps = @("SecurityHealth", "Windows Security", "WindowsDefender")
$runPaths = @(
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
)
foreach ($path in $runPaths) {
if (Test-Path $path) {
$entries = Get-ItemProperty -Path $path
$entries.PSObject.Properties |
Where-Object { $_.Name -notmatch "^PS" -and $excludedApps -notcontains $_.Name } |
ForEach-Object {
try {
Remove-ItemProperty -Path $path -Name $_.Name -Force -ErrorAction Stop
Write-Host " [OK] Removed startup entry: $($_.Name)" -ForegroundColor Green
} catch {
Write-Host " [FAIL] $($_.Name): $($_.Exception.Message)" -ForegroundColor Red
}
}
}
}
$Results.Add("Startup apps: Cleaned")
# ============================================================
# SECTION 4: EDGE PRIVACY [FIXED - uses official policy paths]
# ============================================================
Write-Section "SECTION 4: Microsoft Edge Privacy"
$edgePolicyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Edge"
# Official Microsoft Edge policy registry values
$edgePolicies = @{
"UserFeedbackAllowed" = 0 # Disable feedback
"MetricsReportingEnabled" = 0 # Disable usage/crash reports
"SendSiteInfoToImproveServices" = 0 # Disable site info sharing
"PersonalizationReportingEnabled" = 0 # Disable personalization
"EdgeShoppingAssistantEnabled" = 0 # Disable shopping assistant
"SmartScreenEnabled" = 1 # Keep SmartScreen ON (security)
"TrackingPrevention" = 3 # Strict tracking prevention
"SyncDisabled" = 1 # Disable sync
"SpotlightExperiencesAndRecommendationsEnabled" = 0
"ShowMicrosoftRewards" = 0
"EdgeFollowEnabled" = 0
"SearchSuggestEnabled" = 0
}
foreach ($policy in $edgePolicies.GetEnumerator()) {
Set-RegValue $edgePolicyPath $policy.Key $policy.Value
}
$Results.Add("Edge: Privacy policies applied")
# ============================================================
# SECTION 5: DISK CLEANUP
# ============================================================
Write-Section "SECTION 5: Disk Cleanup"
# Set all cleanmgr flags silently, then run
$cleanmgrKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches"
$categories = @(
"Active Setup Temp Folders", "Downloaded Program Files", "Internet Cache Files",
"Memory Dump Files", "Old ChkDsk Files", "Previous Installations",
"Recycle Bin", "Setup Log Files", "System error memory dump files",
"Temporary Files", "Thumbnail Cache", "Update Cleanup", "Windows Error Reporting Files"
)
foreach ($cat in $categories) {
$catPath = "$cleanmgrKey\$cat"
if (Test-Path $catPath) {
Set-RegValue $catPath "StateFlags0001" 2
}
}
Write-Host " Running Disk Cleanup silently..." -ForegroundColor Yellow
Start-Process -FilePath "cleanmgr.exe" -ArgumentList "/sagerun:1" -NoNewWindow -Wait
Write-Host " [OK] Disk Cleanup complete" -ForegroundColor Green
$Results.Add("Disk Cleanup: Done")
# ============================================================
# SECTION 6: REGISTRY SECURITY
# ============================================================
Write-Section "SECTION 6: Registry Security"
# Disable remote registry access
Disable-Svc "RemoteRegistry"
# Restrict anonymous access
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" "RestrictAnonymous" 1
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" "RestrictAnonymousSAM" 1
# Disable LM hash storage
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" "NoLMHash" 1
# Force NTLMv2
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" "LmCompatibilityLevel" 5
$Results.Add("Registry Security: Hardened")
# ============================================================
# SECTION 7: CONFIGURE FIREWALL
# ============================================================
Write-Section "SECTION 7: Windows Firewall"
try {
netsh advfirewall reset | Out-Null
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound | Out-Null
netsh advfirewall set allprofiles state on | Out-Null
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True `
-DefaultInboundAction Block -DefaultOutboundAction Allow `
-NotifyOnListen False `
-LogBlocked True `
-LogFileName "%SystemRoot%\System32\LogFiles\Firewall\pfirewall.log" `
-LogMaxSizeKilobytes 32767
Write-Host " [OK] Firewall configured" -ForegroundColor Green
$Results.Add("Firewall: Enabled + logging")
} catch {
Write-Host " [FAIL] Firewall: $($_.Exception.Message)" -ForegroundColor Red
}
# ============================================================
# SECTION 8: WINDOWS DEFENDER [FIXED - removed MAPS/Samples]
# ============================================================
Write-Section "SECTION 8: Windows Defender"
try {
# Enable real-time protection
Set-MpPreference -DisableRealtimeMonitoring $false
Set-MpPreference -DisableBehaviorMonitoring $false
Set-MpPreference -DisableIOAVProtection $false
Set-MpPreference -DisableScriptScanning $false
# Privacy-respecting: Disable cloud sample submission
Set-MpPreference -MAPSReporting 0 # No MAPS reporting
Set-MpPreference -SubmitSamplesConsent 2 # Never send samples
# Enable PUA protection
Set-MpPreference -PUAProtection Enabled
# Enable network protection
Set-MpPreference -EnableNetworkProtection Enabled
Write-Host " [OK] Defender configured (privacy-safe)" -ForegroundColor Green
$Results.Add("Windows Defender: Enabled (privacy-safe settings)")
} catch {
Write-Host " [FAIL] Defender: $($_.Exception.Message)" -ForegroundColor Red
}
# ============================================================
# SECTION 9: DISABLE UNNECESSARY SERVICES
# ============================================================
Write-Section "SECTION 9: Unnecessary Services"
$servicesToDisable = @(
"XblGameSave", # Xbox Game Save
"XboxNetApiSvc", # Xbox networking
"XblAuthManager", # Xbox Auth
"RetailDemo", # Retail Demo mode
"MapsBroker", # Offline maps
"OneSyncSvc", # Sync framework (per-user svc handled separately)
"WSearch", # Windows Search indexer — disable if not needed
"Fax", # Fax service
"PrintNotify", # Printer notifications (keep if you print)
"RemoteAccess", # Routing and Remote Access
"RemoteRegistry", # Remote Registry (also in Section 6)
"SharedAccess", # Internet Connection Sharing
"TrkWks" # Distributed Link Tracking Client
)
foreach ($svc in $servicesToDisable) {
Disable-Svc $svc
}
$Results.Add("Unnecessary Services: Disabled")
# ============================================================
# SECTION 10: DISABLE UNNECESSARY SCHEDULED TASKS [NEW]
# ============================================================
Write-Section "SECTION 10: Scheduled Tasks"
$tasksToDisable = @(
@{ Path = "\Microsoft\Windows\Application Experience\"; Name = "Microsoft Compatibility Appraiser" },
@{ Path = "\Microsoft\Windows\Application Experience\"; Name = "ProgramDataUpdater" },
@{ Path = "\Microsoft\Windows\Customer Experience Improvement Program\"; Name = "Consolidator" },
@{ Path = "\Microsoft\Windows\Customer Experience Improvement Program\"; Name = "UsbCeip" },
@{ Path = "\Microsoft\Windows\DiskDiagnostic\"; Name = "Microsoft-Windows-DiskDiagnosticDataCollector" },
@{ Path = "\Microsoft\Windows\Feedback\Siuf\"; Name = "DmClient" },
@{ Path = "\Microsoft\Windows\Feedback\Siuf\"; Name = "DmClientOnScenarioDownload" },
@{ Path = "\Microsoft\Windows\Windows Error Reporting\"; Name = "QueueReporting" },
@{ Path = "\Microsoft\Windows\Location\"; Name = "WindowsActionDialog" },
@{ Path = "\Microsoft\Windows\Maps\"; Name = "MapsToastTask" },
@{ Path = "\Microsoft\Windows\Maps\"; Name = "MapsUpdateTask" }
)
foreach ($task in $tasksToDisable) {
Disable-Task $task.Path $task.Name
}
$Results.Add("Scheduled Tasks: Telemetry tasks disabled")
# ============================================================
# SECTION 11: ADVERTISING ID & ACTIVITY HISTORY [NEW]
# ============================================================
Write-Section "SECTION 11: Advertising ID & Activity History"
# Advertising ID
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" "Enabled" 0
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo" "DisabledByGroupPolicy" 1
# Activity History (Timeline)
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "EnableActivityFeed" 0
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "PublishUserActivities" 0
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "UploadUserActivities" 0
# Location tracking
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors" "DisableLocation" 1
# App access to camera/microphone/contacts (privacy settings)
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location" "Value" "Deny" -Type String
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\microphone" "Value" "Deny" -Type String
$Results.Add("Advertising ID & Activity History: Disabled")
# ============================================================
# SECTION 12: DISABLE CORTANA & SEARCH TELEMETRY [NEW]
# ============================================================
Write-Section "SECTION 12: Cortana & Search"
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" "AllowCortana" 0
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" "DisableWebSearch" 1
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" "ConnectedSearchUseWeb" 0
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" "AllowSearchToUseLocation" 0
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" "BingSearchEnabled" 0
Set-RegValue "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" "CortanaConsent" 0
$Results.Add("Cortana & Search: Web search disabled")
# ============================================================
# SECTION 13: DNS-over-HTTPS (DoH) [NEW]
# ============================================================
Write-Section "SECTION 13: DNS over HTTPS (DoH)"
Write-Host " Configuring DoH via Cloudflare (1.1.1.1) and Google (8.8.8.8)..." -ForegroundColor Yellow
# Enable DoH in Windows 11 (build 19628+)
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" "EnableAutoDoh" 2
# Set DNS servers with DoH template
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
foreach ($adapter in $adapters) {
try {
Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex `
-ServerAddresses ("1.1.1.1", "1.0.0.1", "8.8.8.8", "8.8.4.4") -ErrorAction SilentlyContinue
Write-Host " [OK] DNS set on: $($adapter.Name)" -ForegroundColor Green
} catch {
Write-Host " [SKIP] Could not set DNS on: $($adapter.Name)" -ForegroundColor DarkGray
}
}
# Register Cloudflare DoH template
Add-DnsClientDohServerAddress -ServerAddress "1.1.1.1" -DohTemplate "https://cloudflare-dns.com/dns-query" `
-AllowFallbackToUdp $false -AutoUpgrade $true -ErrorAction SilentlyContinue
Add-DnsClientDohServerAddress -ServerAddress "1.0.0.1" -DohTemplate "https://cloudflare-dns.com/dns-query" `
-AllowFallbackToUdp $false -AutoUpgrade $true -ErrorAction SilentlyContinue
$Results.Add("DNS: DoH enabled (Cloudflare + Google)")
# ============================================================
# SECTION 14: POWER & PERFORMANCE
# ============================================================
Write-Section "SECTION 14: Power & Performance"
# Balanced plan UUID (default) — switch to High Performance
try {
$highPerf = powercfg -list | Select-String "High performance"
if ($highPerf) {
$guid = ($highPerf -split "\s+")[3]
powercfg -setactive $guid
Write-Host " [OK] Power plan: High Performance" -ForegroundColor Green
} else {
Write-Host " [INFO] High Performance plan not found, creating..." -ForegroundColor Yellow
powercfg -duplicatescheme SCHEME_MIN | Out-Null
}
} catch {
Write-Host " [SKIP] Power plan: $($_.Exception.Message)" -ForegroundColor DarkGray
}
# Disable hibernation (saves disk space)
powercfg -h off
Write-Host " [OK] Hibernation disabled (hiberfil.sys removed)" -ForegroundColor Green
# Disable fast startup (can cause issues with dual-boot)
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" "HiberbootEnabled" 0
$Results.Add("Power: High Performance, Hibernation off")
# ============================================================
# SUMMARY REPORT
# ============================================================
Write-Host ""
Write-Host ("=" * 60) -ForegroundColor DarkGreen
Write-Host " SUMMARY — Optimizations Applied" -ForegroundColor Green
Write-Host ("=" * 60) -ForegroundColor DarkGreen
foreach ($line in $Results) {
Write-Host " ✓ $line" -ForegroundColor Green
}
Write-Host ""
Write-Host " Restart your computer to apply all changes." -ForegroundColor Cyan
$restart = Read-Host " Restart now? (y/N)"
if ($restart -eq "y") {
Restart-Computer -Force
}
Тази статия е написана от Тони Ангелчовски и е публикувана ексклузивно във форума на DT Garage. Всички права са запазени. Забранено е всякакво копиране, разпространение или използване на тази статия без изричното писмено разрешение на автора.
Знаете ли, че работим 24x7, за да ви предоставим най-добрите статии и уроци...?
Last edited: