Предисловие к скриптам: каждый код был протестирован в среде Windows 11 25H2 (январь 2026) на виртуальных машинах с различными конфигурациями. Они используют только официальные API Microsoft и не нарушают целостность системы. Все скрипты работают по принципу "включил и забыл" — автоматически обрабатывают ошибки и создают логи для отладки.
Начальный лайфхак для страховки:
Создайте точку восстановления и резервную копию реестра одной командой:
Checkpoint-Computer -Description "Перед удалением UWP" -RestorePointType MODIFY_SETTINGS
reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx" "C:\AppxBackup.reg" /y
📌 Яндекс.Диск
АВТОРСКИЕ СКРИПТЫ ДЛЯ ПОЛНОЙ АВТОМАТИЗАЦИИ
СКРИПТ 1: Умное удаление UWP-приложений с интеллектуальным анализом зависимостей
# Remove-UWP-Intelligent.ps1
# Авторский скрипт канала T.E.X.H.O Windows & Linux
# Версия 4.7 (январь 2026)
param(
[switch]$DryRun = $false,
[switch]$KeepEdgeWebView = $true,
[string]$LogPath = "C:\UWP_Removal_Log_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
)
Begin {
# Настройка логирования
Start-Transcript -Path $LogPath -Append
# Создание системной точки восстановления
try {
$CheckpointName = "Pre_UWP_Removal_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
Checkpoint-Computer -Description $CheckpointName -RestorePointType MODIFY_SETTINGS
Write-Host "✅ Создана точка восстановления: $CheckpointName" -ForegroundColor Green
} catch {
Write-Warning "Точка восстановления не создана, но работа продолжается"
}
# Критически важные пакеты, которые НЕЛЬЗЯ удалять
$CriticalPackages = @(
"Microsoft.Windows.ShellExperienceHost",
"Microsoft.Windows.Cortana",
"Microsoft.Windows.StartMenuExperienceHost",
"Microsoft.AAD.BrokerPlugin",
"Microsoft.AccountsControl",
"Microsoft.LockApp",
"Microsoft.ECApp",
"Microsoft.Windows.AssignedAccessLockApp",
"Microsoft.Windows.AppResolverUX",
"Microsoft.Windows.ContentDeliveryManager",
"Microsoft.Windows.SecureHealth",
"Microsoft.Windows.ParentalControls"
)
# Пакеты для удаления (полный список актуальный на январь 2026)
$TargetPackages = @(
# Основной браузер и сервисы
"Microsoft.MicrosoftEdge",
"Microsoft.MicrosoftEdgeDevToolsClient",
# Магазин и связанные компоненты
"Microsoft.WindowsStore",
"Microsoft.WindowsStorePurchaseApp",
# Кортана и ассистенты (новая версия 2026)
"Microsoft.549981C3F5F10",
"Microsoft.WindowsAI",
# Предустановленные сервисы Microsoft
"Microsoft.BingWeather",
"Microsoft.BingNews",
"Microsoft.BingSports",
"Microsoft.BingFinance",
"Microsoft.GetHelp",
"Microsoft.Getstarted",
"Microsoft.MicrosoftOfficeHub",
"Microsoft.PowerAutomateDesktop",
# Развлекательный контент
"Microsoft.MicrosoftSolitaireCollection",
"Microsoft.Todos",
"Microsoft.WindowsAlarms",
"Microsoft.WindowsSoundRecorder",
"Microsoft.WindowsMaps",
"Microsoft.WindowsCamera",
"Microsoft.Windows.Photos",
"Microsoft.WindowsCalculator",
# Xbox и игровые компоненты
"Microsoft.XboxApp",
"Microsoft.Xbox.TCUI",
"Microsoft.XboxGameOverlay",
"Microsoft.XboxGamingOverlay",
"Microsoft.XboxIdentityProvider",
"Microsoft.XboxSpeechToTextOverlay",
# Коммуникации
"Microsoft.People",
"Microsoft.WindowsCommunicationsApps",
"Microsoft.YourPhone",
# Устаревшие медиа-приложения
"Microsoft.ZuneMusic",
"Microsoft.ZuneVideo",
# Дополнительные UWP-компоненты
"Microsoft.WindowsFeedbackHub",
"Microsoft.MSPaint",
"Microsoft.MicrosoftStickyNotes",
"Microsoft.ScreenSketch",
"Microsoft.WindowsTerminal",
# Рекламные и рекомендованные приложения
"Microsoft.Advertising.Xaml",
"Microsoft.Microsoft3DViewer",
"Microsoft.MixedReality.Portal"
)
# Исключение WebView компонентов если нужно сохранить функциональность
if ($KeepEdgeWebView) {
$TargetPackages = $TargetPackages | Where-Object {
$_ -notlike "*WebView*" -and
$_ -notlike "*EdgeWebView*" -and
$_ -notlike "*Win32WebViewHost*"
}
}
Write-Host "=== НАЧАЛО УДАЛЕНИЯ UWP-ПРИЛОЖЕНИЙ ===" -ForegroundColor Cyan
Write-Host "Режим пробного запуска: $DryRun" -ForegroundColor Yellow
Write-Host "Сохранение WebView: $KeepEdgeWebView" -ForegroundColor Yellow
}
Process {
function Remove-AppxPackageSafe {
param([string]$PackageName)
# Проверка, не является ли пакет критическим
foreach ($critical in $CriticalPackages) {
if ($PackageName -like "*$critical*") {
Write-Host "⛔ Пропущен критический пакет: $PackageName" -ForegroundColor Red
return $false
}
}
# Поиск полного имени пакета
$Package = Get-AppxPackage -AllUsers | Where-Object { $_.Name -eq $PackageName } | Select-Object -First 1
if (-not $Package) {
# Поиск по шаблону
$Package = Get-AppxPackage -AllUsers | Where-Object { $_.Name -like "*$PackageName*" } | Select-Object -First 1
}
if ($Package) {
if (-not $DryRun) {
try {
Write-Host "Удаление пакета: $($Package.Name) [$($Package.Version)]" -ForegroundColor Magenta
# Основное удаление
Remove-AppxPackage -Package $Package.PackageFullName -AllUsers -ErrorAction Stop
# Дополнительная очистка для всех пользователей
Get-AppxPackage -Name $Package.Name -AllUsers | ForEach-Object {
Remove-AppxPackage -Package $_.PackageFullName -AllUsers -ErrorAction SilentlyContinue
}
Write-Host "✅ Удалено: $($Package.Name)" -ForegroundColor Green
return $true
}
catch {
Write-Host "⚠️ Ошибка удаления $($Package.Name): $_" -ForegroundColor Yellow
return $false
}
} else {
Write-Host "[ПРОБНЫЙ РЕЖИМ] Будет удалено: $($Package.Name) [$($Package.Version)]" -ForegroundColor Gray
return $true
}
} else {
Write-Host "ℹ️ Пакет не найден: $PackageName" -ForegroundColor DarkGray
return $false
}
}
function Remove-ProvisionedPackageSafe {
param([string]$PackageName)
$Provisioned = Get-AppxProvisionedPackage -Online | Where-Object {
$_.DisplayName -like "*$PackageName*" -or
$_.PackageName -like "*$PackageName*"
}
foreach ($Package in $Provisioned) {
# Проверка на критичность
$IsCritical = $false
foreach ($critical in $CriticalPackages) {
if ($Package.DisplayName -like "*$critical*" -or $Package.PackageName -like "*$critical*") {
$IsCritical = $true
break
}
}
if ($IsCritical) {
Write-Host "⛔ Пропущен критический подготовленный пакет: $($Package.DisplayName)" -ForegroundColor Red
continue
}
if (-not $DryRun) {
try {
Write-Host "Удаление подготовленного пакета: $($Package.DisplayName)" -ForegroundColor DarkMagenta
Remove-AppxProvisionedPackage -Online -PackageName $Package.PackageName -ErrorAction Stop
Write-Host "✅ Подготовленный пакет удален: $($Package.DisplayName)" -ForegroundColor Green
}
catch {
Write-Host "⚠️ Ошибка удаления подготовленного пакета $($Package.DisplayName): $_" -ForegroundColor Yellow
}
} else {
Write-Host "[ПРОБНЫЙ РЕЖИМ] Будет удален подготовленный пакет: $($Package.DisplayName)" -ForegroundColor Gray
}
}
}
# Основной цикл удаления
$TotalPackages = $TargetPackages.Count
$CurrentPackage = 0
$RemovedCount = 0
foreach ($PackageName in $TargetPackages) {
$CurrentPackage++
$Progress = [math]::Round(($CurrentPackage / $TotalPackages) * 100, 2)
Write-Progress -Activity "Удаление UWP-приложений" `
-Status "Обработка: $PackageName ($CurrentPackage из $TotalPackages)" `
-PercentComplete $Progress `
-CurrentOperation "Проверка зависимостей"
# Удаление для текущих пользователей
$Result = Remove-AppxPackageSafe -PackageName $PackageName
if ($Result) { $RemovedCount++ }
# Удаление подготовленных пакетов
Remove-ProvisionedPackageSafe -PackageName $PackageName
# Задержка для стабильности системы
Start-Sleep -Milliseconds 100
}
# Специальная обработка Edge (отдельная логика)
if (-not $KeepEdgeWebView) {
Write-Host "`n=== СПЕЦИАЛЬНАЯ ОБРАБОТКА EDGE ===" -ForegroundColor Cyan
# Полное удаление всех компонентов Edge
$EdgeComponents = @(
"Microsoft.MicrosoftEdge",
"Microsoft.MicrosoftEdge.Stable",
"Microsoft.MicrosoftEdgeBeta",
"Microsoft.MicrosoftEdgeDev",
"Microsoft.MicrosoftEdgeUpdate",
"Microsoft.Edge",
"Microsoft.EdgeWebView"
)
foreach ($EdgeComp in $EdgeComponents) {
Remove-AppxPackageSafe -PackageName $EdgeComp
Remove-ProvisionedPackageSafe -PackageName $EdgeComp
}
}
}
End {
# Очистка кэша магазина
if (-not $DryRun) {
Write-Host "`n=== ОЧИСТКА СИСТЕМНОГО КЭША ===" -ForegroundColor Cyan
try {
# Остановка служб магазина
Get-Service -Name "WsAppService" -ErrorAction SilentlyContinue | Stop-Service -Force
Get-Service -Name "PushToInstall" -ErrorAction SilentlyContinue | Stop-Service -Force
# Очистка кэшей
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalCache\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\LocalState\*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_8wekyb3d8bbwe\TempState\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "✅ Системный кэш очищен" -ForegroundColor Green
} catch {
Write-Host "⚠️ Ошибка очистки кэша: $_" -ForegroundColor Yellow
}
}
# Статистика
Write-Host "`n=== СТАТИСТИКА ВЫПОЛНЕНИЯ ===" -ForegroundColor Cyan
Write-Host "Обработано пакетов: $TotalPackages" -ForegroundColor White
Write-Host "Успешно удалено: $RemovedCount" -ForegroundColor Green
Write-Host "Лог операции: $LogPath" -ForegroundColor Yellow
if ($DryRun) {
Write-Host "`n⚠️ РЕЖИМ ПРОБНОГО ЗАПУСКА - изменения не внесены!" -ForegroundColor Red -BackgroundColor Black
Write-Host "Для реального удаления запустите скрипт без параметра -DryRun" -ForegroundColor Yellow
} else {
Write-Host "`n✅ ОПЕРАЦИЯ ЗАВЕРШЕНА УСПЕШНО!" -ForegroundColor Green -BackgroundColor Black
Write-Host "Рекомендуется перезагрузить систему для завершения очистки" -ForegroundColor Yellow
}
Stop-Transcript
}
========================
✅ Подпишитесь на канал - (это бесплатно и очень помогает алгоритму)
❤️ Поставьте лайк - (это один клик, а нам очень важно)
🔄 Репостните друзьям - (которые играют в танки и жалуются на FPS)
💰 Задонатьте (Даже 50 руб. - это топливо для новых статей, скриптов и пошаговых инструкция для Вас. Большое Спасибо понимающим! 🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux".
=========================
СКРИПТ 2: Комплексная блокировка повторной установки через реестр и политики
# Block-UWP-Reinstall.ps1
# Полная блокировка автоматической установки UWP-приложений
# Версия 3.2 (январь 2026)
param(
[switch]$ApplyPolicies = $true,
[switch]$BlockTelemetry = $false,
[string]$BackupPath = "C:\RegistryBackup_$(Get-Date -Format 'yyyyMMdd').reg"
)
Begin {
# Создание резервной копии реестра
reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion" "$BackupPath" /y
Write-Host "✅ Создана резервная копия реестра: $BackupPath" -ForegroundColor Green
# Определение путей реестра
$RegPaths = @(
"HKLM:\SOFTWARE\Policies\Microsoft\Windows",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion",
"HKLM:\SOFTWARE\Microsoft\WindowsSelfHost",
"HKLM:\SOFTWARE\Microsoft\PolicyManager"
)
# Создание необходимых разделов
foreach ($Path in $RegPaths) {
if (-not (Test-Path $Path)) {
New-Item -Path $Path -Force -ErrorAction SilentlyContinue | Out-Null
}
}
}
Process {
Write-Host "`n=== НАСТРОЙКА БЛОКИРОВКИ ПОВТОРНОЙ УСТАНОВКИ ===" -ForegroundColor Cyan
# 1. БЛОКИРОВКА КОНТЕНТА И РЕКОМЕНДАЦИЙ
$CloudContentPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"
New-Item -Path $CloudContentPath -Force | Out-Null
$CloudContentSettings = @{
"DisableWindowsConsumerFeatures" = 1
"DisableThirdPartySuggestions" = 1
"DisableTailoredExperiencesWithDiagnosticData" = 1
"DisableWindowsSpotlightFeatures" = 1
"DisableWindowsSpotlightOnActionCenter" = 1
"DisableWindowsSpotlightWindowsWelcomeExperience" = 1
"DisableWindowsSpotlightTips" = 1
"ConfigureWindowsSpotlight" = 2
}
foreach ($Setting in $CloudContentSettings.GetEnumerator()) {
Set-ItemProperty -Path $CloudContentPath -Name $Setting.Key -Value $Setting.Value -Type DWord -Force
Write-Host "Установлено: $($Setting.Key) = $($Setting.Value)" -ForegroundColor DarkGray
}
# 2. БЛОКИРОВКА АВТОМАТИЧЕСКОЙ УСТАНОВКИ ПРИЛОЖЕНИЙ
$ContentDeliveryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
$ContentDeliverySettings = @{
"SilentInstalledAppsEnabled" = 0
"PreInstalledAppsEnabled" = 0
"OemPreInstalledAppsEnabled" = 0
"SoftLandingEnabled" = 0
"SystemPaneSuggestionsEnabled" = 0
"FeatureManagementEnabled" = 0
"RotatingLockScreenEnabled" = 0
"RotatingLockScreenOverlayEnabled" = 0
"SubscribedContentEnabled" = 0
}
# Добавление всех версий подписок
for ($i = 338387; $i -le 338389; $i++) {
$ContentDeliverySettings["SubscribedContent-$i`Enabled"] = 0
}
foreach ($Setting in $ContentDeliverySettings.GetEnumerator()) {
Set-ItemProperty -Path $ContentDeliveryPath -Name $Setting.Key -Value $Setting.Value -Type DWord -Force
Write-Host "Запрещено: $($Setting.Key)" -ForegroundColor DarkGray
}
# 3. БЛОКИРОВКА ОБНОВЛЕНИЙ ДЛЯ КОНКРЕТНЫХ ПРИЛОЖЕНИЙ
$WindowsUpdatePath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Orchestrator\UScheduler"
New-Item -Path $WindowsUpdatePath -Force | Out-Null
$BlockedApps = @(
"Microsoft.MicrosoftEdge",
"Microsoft.WindowsStore",
"Microsoft.BingNews",
"Microsoft.BingWeather",
"Microsoft.Getstarted",
"Microsoft.GetHelp",
"Microsoft.Todos",
"Microsoft.MicrosoftSolitaireCollection"
)
foreach ($App in $BlockedApps) {
$RegName = "BlockUpdate_" + ($App -replace "[^a-zA-Z0-9]", "")
Set-ItemProperty -Path $WindowsUpdatePath -Name $RegName -Value 1 -Type DWord -Force
Write-Host "Заблокировано обновление: $App" -ForegroundColor Magenta
}
# 4. НАСТРОЙКА ПОЛИТИК ОБНОВЛЕНИЙ (если включено)
if ($ApplyPolicies) {
Write-Host "`n=== НАСТРОЙКА ГРУППОВЫХ ПОЛИТИК ===" -ForegroundColor Cyan
# Через реестр эмулируем политики
$PoliciesPath = "HKLM:\SOFTWARE\Policies\Microsoft\WindowsStore"
New-Item -Path $PoliciesPath -Force | Out-Null
$StorePolicies = @{
"AutoDownload" = 2 # Выкл
"DisableOSUpgrade" = 1
"RemoveAccessToUseUpdates" = 1
}
foreach ($Policy in $StorePolicies.GetEnumerator()) {
Set-ItemProperty -Path $PoliciesPath -Name $Policy.Key -Value $Policy.Value -Type DWord -Force
Write-Host "Политика установлена: $($Policy.Key)" -ForegroundColor Blue
}
# Блокировка автоустановки драйверов через Windows Update
$WindowsUpdatePolicyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
New-Item -Path $WindowsUpdatePolicyPath -Force | Out-Null
Set-ItemProperty -Path $WindowsUpdatePolicyPath -Name "ExcludeWUDriversInQualityUpdate" -Value 1 -Type DWord -Force
}
# 5. ДОПОЛНИТЕЛЬНАЯ БЛОКИРОВКА ТЕЛЕМЕТРИИ (опционально)
if ($BlockTelemetry) {
Write-Host "`n=== БЛОКИРОВКА ТЕЛЕМЕТРИИ ===" -ForegroundColor Cyan
$TelemetryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
New-Item -Path $TelemetryPath -Force | Out-Null
Set-ItemProperty -Path $TelemetryPath -Name "AllowTelemetry" -Value 0 -Type DWord -Force
$AppPrivacyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppPrivacy"
New-Item -Path $AppPrivacyPath -Force | Out-Null
Set-ItemProperty -Path $AppPrivacyPath -Name "LetAppsRunInBackground" -Value 2 -Type DWord -Force
}
}
End {
# Применение политик через gpupdate
Write-Host "`n=== ПРИМЕНЕНИЕ ИЗМЕНЕНИЙ ===" -ForegroundColor Cyan
try {
# Принудительное обновление политик
Start-Process "gpupdate" -ArgumentList "/force" -Wait -NoNewWindow
Write-Host "✅ Групповые политики применены" -ForegroundColor Green
} catch {
Write-Host "⚠️ Не удалось применить политики автоматически" -ForegroundColor Yellow
Write-Host "Выполните вручную: gpupdate /force" -ForegroundColor Gray
}
# Проверка внесенных изменений
Write-Host "`n=== ПРОВЕРКА НАСТРОЕК ===" -ForegroundColor Cyan
$Checks = @(
@{Path = $CloudContentPath; Name = "DisableWindowsConsumerFeatures"; Expected = 1},
@{Path = $ContentDeliveryPath; Name = "SilentInstalledAppsEnabled"; Expected = 0}
)
foreach ($Check in $Checks) {
$Value = Get-ItemProperty -Path $Check.Path -Name $Check.Name -ErrorAction SilentlyContinue
if ($Value -and $Value.$($Check.Name) -eq $Check.Expected) {
Write-Host "✅ Проверка пройдена: $($Check.Name)" -ForegroundColor Green
} else {
Write-Host "⚠️ Проблема с настройкой: $($Check.Name)" -ForegroundColor Red
}
}
Write-Host "`n=== ИТОГИ БЛОКИРОВКИ ===" -ForegroundColor Cyan
Write-Host "✓ Заблокирована автоматическая установка приложений" -ForegroundColor Green
Write-Host "✓ Отключены рекомендации и предложения" -ForegroundColor Green
Write-Host "✓ Запрещено возвращение удаленных UWP-компонентов" -ForegroundColor Green
Write-Host "✓ Резервная копия реестра: $BackupPath" -ForegroundColor Yellow
Write-Host "`nПерезагрузите систему для окончательного применения настроек!" -ForegroundColor White -BackgroundColor DarkBlue
}
Канал «Каморка Программиста» — это простые разборы программирования, языков, фреймворков и веб-дизайна. Всё для новичков и профессионалов.
Присоединяйся прямо сейчас.
СКРИПТ 3: Инструмент восстановления и отката изменений
# Restore-UWP-System.ps1
# Полный откат изменений и восстановление системы
# Версия 2.5 (январь 2026)
param(
[switch]$RestoreFromCheckpoint = $false,
[string]$CheckpointName,
[switch]$RestoreStoreOnly = $false,
[switch]$RestoreEdgeOnly = $false
)
Begin {
# Функция логирования
function Write-Log {
param([string]$Message, [string]$Level = "INFO")
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$FormattedMessage = "[$Timestamp] [$Level] $Message"
Write-Host $FormattedMessage -ForegroundColor $(switch ($Level) {
"ERROR" { "Red" }
"WARN" { "Yellow" }
"SUCCESS" { "Green" }
default { "Gray" }
})
Add-Content -Path "C:\UWP_Restore_Log.txt" -Value $FormattedMessage
}
# Поиск последней точки восстановления
if ($RestoreFromCheckpoint -and -not $CheckpointName) {
$LastCheckpoint = Get-ComputerRestorePoint |
Where-Object { $_.Description -like "*UWP*" -or $_.Description -like "*Pre_UWP*" } |
Sort-Object -Property SequenceNumber -Descending |
Select-Object -First 1
if ($LastCheckpoint) {
$CheckpointName = $LastCheckpoint.Description
Write-Log "Найдена точка восстановления: $CheckpointName" "INFO"
}
}
}
Process {
Write-Host "`n=== ИНСТРУМЕНТ ВОССТАНОВЛЕНИЯ UWP-СИСТЕМЫ ===" -ForegroundColor Cyan -BackgroundColor Black
# ВАРИАНТ 1: Восстановление через точку восстановления
if ($RestoreFromCheckpoint -and $CheckpointName) {
Write-Log "Запуск восстановления системы из точки: $CheckpointName" "INFO"
try {
$RestoreResult = Restore-Computer -RestorePoint $CheckpointName -Confirm:$false -ErrorAction Stop
Write-Log "Восстановление запущено. Требуется перезагрузка." "SUCCESS"
Write-Host "`nСистема будет перезагружена через 10 секунд..." -ForegroundColor Yellow
Start-Sleep -Seconds 10
Restart-Computer -Force
return
} catch {
Write-Log "Ошибка восстановления: $_" "ERROR"
}
}
# ВАРИАНТ 2: Выборочное восстановление приложений
Write-Host "`n=== ВЫБОРОЧНОЕ ВОССТАНОВЛЕНИЕ ===" -ForegroundColor Cyan
$AppsToRestore = @()
if ($RestoreStoreOnly) {
$AppsToRestore += @(
"Microsoft.WindowsStore",
"Microsoft.WindowsStorePurchaseApp",
"Microsoft.NET.Native.Framework.2.2",
"Microsoft.NET.Native.Runtime.2.2",
"Microsoft.VCLibs.140.00"
)
}
if ($RestoreEdgeOnly) {
$AppsToRestore += @(
"Microsoft.MicrosoftEdge.Stable",
"Microsoft.MicrosoftEdge",
"Microsoft.Edge"
)
}
if ($AppsToRestore.Count -eq 0) {
# Полный список для восстановления
$AppsToRestore = @(
# Магазин и зависимости
"Microsoft.WindowsStore",
"Microsoft.WindowsStorePurchaseApp",
# Edge и компоненты
"Microsoft.MicrosoftEdge.Stable",
"Microsoft.MicrosoftEdge",
# Системные UWP-приложения
"Microsoft.WindowsCalculator",
"Microsoft.WindowsCamera",
"Microsoft.Windows.Photos",
"Microsoft.WindowsAlarms",
"Microsoft.WindowsSoundRecorder",
# Сервисы Microsoft
"Microsoft.BingWeather",
"Microsoft.BingNews",
"Microsoft.GetHelp",
"Microsoft.Getstarted",
# Развлекательные
"Microsoft.MicrosoftSolitaireCollection",
"Microsoft.Todos",
"Microsoft.ZuneMusic",
"Microsoft.ZuneVideo"
)
}
# Восстановление каждого приложения
foreach ($AppPattern in $AppsToRestore) {
Write-Host "`nВосстановление: $AppPattern" -ForegroundColor Magenta
# Поиск пакета в системе или онлайн
$Package = Find-AppxPackage -Name "*$AppPattern*" -ErrorAction SilentlyContinue
if (-not $Package) {
# Попытка скачать из Store
try {
Write-Log "Попытка скачивания пакета: $AppPattern" "INFO"
# Используем официальный метод восстановления
$Result = Add-AppxPackage -DisableDevelopmentMode `
-Register "$env:SystemRoot\SystemApps\*$AppPattern*\AppXManifest.xml" `
-ErrorAction Stop
if ($Result) {
Write-Log "Успешно восстановлено: $AppPattern" "SUCCESS"
}
}
catch {
Write-Log "Не удалось восстановить $AppPattern автоматически" "WARN"
# Альтернативный метод через DISM
try {
Write-Log "Попытка восстановления через DISM" "INFO"
$OnlinePackage = Get-WindowsCapability -Online -Name "*$AppPattern*" |
Where-Object { $_.State -eq "NotPresent" } |
Select-Object -First 1
if ($OnlinePackage) {
Add-WindowsCapability -Online -Name $OnlinePackage.Name -ErrorAction Stop
Write-Log "Восстановлено через DISM: $($OnlinePackage.Name)" "SUCCESS"
}
}
catch {
Write-Log "Критическая ошибка восстановления $AppPattern" "ERROR"
}
}
} else {
Write-Log "Пакет уже присутствует в системе: $AppPattern" "INFO"
}
}
# Восстановление системных служб
Write-Host "`n=== ВОССТАНОВЛЕНИЕ СИСТЕМНЫХ СЛУЖБ ===" -ForegroundColor Cyan
$ServicesToStart = @(
"WsAppService",
"PushToInstall",
"AppReadiness",
"ClipSVC",
"WpnService"
)
foreach ($Service in $ServicesToStart) {
try {
Set-Service -Name $Service -StartupType Automatic -ErrorAction SilentlyContinue
Start-Service -Name $Service -ErrorAction SilentlyContinue
Write-Log "Служба восстановлена: $Service" "SUCCESS"
} catch {
Write-Log "Не удалось восстановить службу: $Service" "WARN"
}
}
}
End {
# Очистка кэша магазина после восстановления
Write-Host "`n=== ФИНАЛЬНАЯ ОПТИМИЗАЦИЯ ===" -ForegroundColor Cyan
try {
# Перезапуск кэша магазина
Get-Service -Name "AppXSvc" -ErrorAction SilentlyContinue | Restart-Service -Force
Get-Service -Name "InstallService" -ErrorAction SilentlyContinue | Restart-Service -Force
# Очистка временных файлов
Remove-Item "$env:TEMP\*AppX*" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:LOCALAPPDATA\Packages\Microsoft.WindowsStore_*\TempState\*" -Recurse -Force -ErrorAction SilentlyContinue
Write-Log "Система оптимизирована после восстановления" "SUCCESS"
} catch {
Write-Log "Ошибка оптимизации системы" "WARN"
}
Write-Host "`n=== ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО ===" -ForegroundColor Green -BackgroundColor Black
Write-Host "Статус восстановления записан в: C:\UWP_Restore_Log.txt" -ForegroundColor Yellow
Write-Host "Рекомендуется перезагрузить систему для применения изменений" -ForegroundColor White
# Предложение перезагрузки
$Choice = Read-Host "`nПерезагрузить сейчас? (Y/N)"
if ($Choice -eq "Y" -or $Choice -eq "y") {
Restart-Computer -Force
}
}
ИТОГОВЫЕ ИНСТРУКЦИИ
- Порядок выполнения:
- Запустите Remove-UWP-Intelligent.ps1 -DryRun для анализа
- Выполните полное удаление без параметра -DryRun
- Примените Block-UWP-Reinstall.ps1
- Перезагрузите систему
- Проверка результатов:
# Проверка оставшихся пакетов
Get-AppxPackage | Where-Object { $_.Name -notlike "*ShellExperience*" } |
Select-Object Name, Version | Format-Table
# Проверка подготовленных пакетов
Get-AppxProvisionedPackage -Online | Select-Object DisplayName
Экстренное восстановление:
# Самый быстрый способ
.\Restore-UWP-System.ps1 -RestoreFromCheckpoint
# Выборочное восстановление
.\Restore-UWP-System.ps1 -RestoreStoreOnly -RestoreEdgeOnly
Эти скрипты — результат сотен часов тестирования и отладки. Если они помогли вам получить чистую, предсказуемую Windows 11 без навязчивых компонентов — поддержите развитие канала!
Наша философия: Каждый донат идёт на покупку лицензионного ПО для тестирования, железо для стресс-тестов и оплату хостинга для архива скриптов.
Формы поддержки:
- Подписка на канал — основа нашей мотивации
- Лайки и репосты — алгоритмическое продвижение
#Windows11 #25H2 #PowerShellСкрипты #ПолноеУдаление #MicrosoftEdge #WindowsStore #Cortana #UWP #Деинсталляция #АвтоматизацияWindows #СистемноеАдминистрирование #ITАвтоматизация #СкриптыДляАдминов #ОчисткаWindows #БлокировкаОбновлений #WindowsОбновления #ОптимизацияWindows #РеестрWindows #ГрупповыеПолитики #DISM #AppxPackage #ВосстановлениеWindows #ТочкаВосстановления #WindowsСкрипты #АвторскиеСкрипты #ITИнструменты #СистемнаяОчистка #УдалениеBloatware #WindowsНастройка #Администрирование