refactor(windows scripts): remove BOM and improve UTF-8 handling

This commit is contained in:
2026-09-09 15:48:32 -04:00
parent d27bf49c40
commit bdeb9c767a
19 changed files with 148 additions and 89 deletions
+11 -8
View File
@@ -1,4 +1,4 @@
<#
<#
LXS - Disk Cleanup (Windows)
Description: Reclaim disk space (temp files, Windows Update cache, recycle
bin, Prefetch, error reports, WinSxS component store).
@@ -23,7 +23,10 @@ if ($LxsLibPath -and (Test-Path $LxsLibPath)) {
Write-Error 'Failed to fetch lib/common.ps1'
exit 1
}
. ([scriptblock]::Create($LxsLibSource))
# The library ships with a UTF-8 BOM (Windows PowerShell 5.1 needs it to
# read the file as UTF-8); over HTTP that BOM arrives as a leading U+FEFF
# character, which the parser will not accept.
. ([scriptblock]::Create(($LxsLibSource -replace '^\uFEFF', '')))
}
$env:LXS_LOG_FILE = Join-Path (Get-LxsTempDir) 'lxs_cleanup.log'
@@ -80,14 +83,14 @@ function Get-LxsFolderSize {
}
# Delete the *contents* of a folder, never the folder itself. Files locked by a
# running process are skipped silently that is expected on a live system.
# running process are skipped silently - that is expected on a live system.
function Clear-LxsFolderContents {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Label
)
if (-not (Test-Path $Path)) {
Write-Host "$($script:Gray) $Label not present, skipped$($script:NC)"
Write-Host "$($script:Gray) $Label - not present, skipped$($script:NC)"
return 0
}
$before = Get-LxsFolderSize -Path $Path
@@ -102,7 +105,7 @@ function Clear-LxsFolderContents {
$after = Get-LxsFolderSize -Path $Path
$freed = [math]::Max(0, $before - $after)
$suffix = if ($skipped -gt 0) { " ($skipped item(s) in use, skipped)" } else { '' }
Write-LxsOk "$Label $(Format-LxsSize $freed) reclaimed$suffix"
Write-LxsOk "$Label - $(Format-LxsSize $freed) reclaimed$suffix"
return $freed
}
@@ -170,7 +173,7 @@ if (-not $NoRecycleBin) {
Write-LxsOk 'Recycle bin emptied'
} catch {
# Clear-RecycleBin throws when the bin is already empty.
Write-Host "$($script:Gray) Recycle bin already empty or not accessible$($script:NC)"
Write-Host "$($script:Gray) Recycle bin - already empty or not accessible$($script:NC)"
}
}
@@ -187,14 +190,14 @@ if ($doUpdateCache) {
$stopped += $svc
}
} catch {
Write-LxsWarn "Could not stop $svc the update cache may be partially locked."
Write-LxsWarn "Could not stop $svc - the update cache may be partially locked."
}
}
try {
Clear-LxsFolderContents -Path (Join-Path $env:SystemRoot 'SoftwareDistribution\Download') -Label 'Windows Update cache' | Out-Null
} finally {
foreach ($svc in $stopped) {
try { Start-Service -Name $svc -ErrorAction Stop } catch { Write-LxsWarn "Failed to restart $svc start it manually." }
try { Start-Service -Name $svc -ErrorAction Stop } catch { Write-LxsWarn "Failed to restart $svc - start it manually." }
}
}
}