⚡ PowerShell 5.1+

Clean Up Windows Error Reporting files

Reports the size of Windows Error Reporting files and optionally clears it out. Dry-run by default.

By WindowsScripting.com · 1.4 KB
Remove-OldErrorReports.ps1
<#
.SYNOPSIS
    Cleans up Windows Error Reporting files.

.DESCRIPTION
    Reports the size of Windows Error Reporting files and, with -DeleteFiles, removes its
    contents. Dry-run by default (reports only) so you can see what
    would be freed before anything is deleted.

.PARAMETER DeleteFiles
    Actually delete the contents. Without this switch, the script only reports.

.EXAMPLE
    .\Remove-OldErrorReports.ps1

.EXAMPLE
    .\Remove-OldErrorReports.ps1 -DeleteFiles
#>

[CmdletBinding(SupportsShouldProcess)]
param(
    [switch]$DeleteFiles
)

$targetPath = 'C:\ProgramData\Microsoft\Windows\WER'

if (-not (Test-Path $targetPath)) {
    Write-Host "$targetPath does not exist on this machine." -ForegroundColor Yellow
    return
}

$items = Get-ChildItem -Path $targetPath -Force -ErrorAction SilentlyContinue
$totalSize = ($items | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum

Write-Host "$targetPath contains $($items.Count) item(s), $([math]::Round(($totalSize / 1MB), 2)) MB" -ForegroundColor Cyan

if ($DeleteFiles) {
    foreach ($item in $items) {
        if ($PSCmdlet.ShouldProcess($item.FullName, 'Delete')) {
            Remove-Item -Path $item.FullName -Recurse -Force -ErrorAction SilentlyContinue
        }
    }
    Write-Host 'Cleanup complete.' -ForegroundColor Green
} else {
    Write-Host 'Run again with -DeleteFiles to actually remove these items.' -ForegroundColor DarkGray
}