# Script de Verificação e Reparo de Saúde do Windows # Modo de depuração (defina como $true para ver todas as saídas de comandos) $DebugMode = $true # Função para verificar se o script está sendo executado com privilégios de administrador function Test-Admin { $currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) } # Verifica se há privilégios de administrador if (-not (Test-Admin)) { Write-Host "Este script requer privilégios de administrador. Por favor, execute o PowerShell como administrador." -ForegroundColor Red Exit } # Função para executar um comando e retornar sua saída function Run-Command { param ( [string]$command, [string]$arguments ) $output = & $command $arguments.Split(" ") if ($DebugMode) { Write-Host "Debug: Saída completa de '$command $arguments':" -ForegroundColor Magenta $output | ForEach-Object { Write-Host $_ -ForegroundColor Gray } } return $output } # Variáveis para rastrear se reparos foram feitos e se um reinício é necessário $repairsMade = $false $restartNeeded = $false # Passo 1: Executar DISM para verificar e reparar qualquer corrupção no repositório de componentes Write-Host "Passo 1: Verificando a saúde do repositório de componentes com DISM..." -ForegroundColor Cyan # DISM CheckHealth $dismCheckOutput = Run-Command "DISM.exe" "/Online /Cleanup-Image /CheckHealth" if ($dismCheckOutput -match "No component store corruption detected.") { Write-Host "O repositório de componentes está saudável." -ForegroundColor Green } else { Write-Host "Questões potenciais no repositório de componentes detectadas. Executando ScanHealth..." -ForegroundColor Yellow # DISM ScanHealth $dismScanOutput = Run-Command "DISM.exe" "/Online /Cleanup-Image /ScanHealth" if ($dismScanOutput -match "Component store corruption detected.") { Write-Host "Corrupção no repositório de componentes confirmada. Tentando reparar..." -ForegroundColor Yellow # DISM RestoreHealth $repairOutput = Run-Command "DISM.exe" "/Online /Cleanup-Image /RestoreHealth" if ($repairOutput -match "The restore operation completed successfully.") { Write-Host "Repositório de componentes reparado com sucesso." -ForegroundColor Green $repairsMade = $true } else { Write-Host "Falha ao reparar o repositório de componentes. Verifique os logs para mais informações." -ForegroundColor Red } } else { Write-Host "Nenhuma corrupção no repositório de componentes detectada após a verificação." -ForegroundColor Green } } # Passo 2: Executar o Verificador de Arquivos do Sistema (SFC) Write-Host "`nPasso 2: Executando o Verificador de Arquivos do Sistema..." -ForegroundColor Cyan # Primeiro, execute sfc /verifyonly $sfcVerifyOutput = Run-Command "sfc" "/verifyonly" if ($sfcVerifyOutput -match "Windows Resource Protection did not find any integrity violations.") { Write-Host "Nenhuma violação de integridade de arquivos do sistema encontrada." -ForegroundColor Green } else { Write-Host "Violação de integridade de arquivos do sistema potencial detectada. Executando verificação completa e reparo..." -ForegroundColor Yellow # Executa sfc /scannow se foram encontradas violações $sfcScanOutput = Run-Command "sfc" "/scannow" if ($sfcScanOutput -match "Windows Resource Protection found corrupt files and successfully repaired them.") { Write-Host "Arquivos do sistema corrompidos encontrados e reparados." -ForegroundColor Yellow $repairsMade = $true } elseif ($sfcScanOutput -match "Windows Resource Protection did not find any integrity violations.") { Write-Host "Nenhuma violação de integridade de arquivos do sistema encontrada após verificação completa." -ForegroundColor Green } else { Write-Host "O Verificador de Arquivos do Sistema encontrou um problema. Verifique os logs para mais informações." -ForegroundColor Red } } # Passo 3: Verificar a saúde do disco Write-Host "`nPasso 3: Verificando a saúde do disco..." -ForegroundColor Cyan $systemDrive = $env:SystemDrive $chkdskOutput = Run-Command "chkdsk" "$systemDrive /scan" if ($chkdskOutput -match "Windows has scanned the file system and found no problems.") { Write-Host "Nenhum erro no sistema de arquivos detectado." -ForegroundColor Green } else { Write-Host "Erros no sistema de arquivos detectados. Agendando um chkdsk completo na próxima reinicialização." -ForegroundColor Yellow $chkdskFixOutput = Run-Command "chkdsk" "$systemDrive /f /r /x" $restartNeeded = $true } # Resumo e solicitação de reinicialização Write-Host "`nProcesso de verificação e reparo concluído." -ForegroundColor Cyan if ($repairsMade) { Write-Host "Alguns reparos foram feitos no seu sistema." -ForegroundColor Yellow } if ($restartNeeded) { Write-Host "Uma reinicialização é necessária para concluir o processo de reparo." -ForegroundColor Yellow $restart = Read-Host "Você deseja reiniciar seu computador agora? (Y/N)" if ($restart -eq "Y" -or $restart -eq "y") { Restart-Computer -Force } else { Write-Host "Por favor, lembre-se de reiniciar seu computador assim que possível para concluir o processo de reparo." -ForegroundColor Yellow } } else { Write-Host "Nenhuma reinicialização é necessária neste momento." -ForegroundColor Green }