File: C:/Users/fred/AppData/Roaming/Code/User/History/5ab3c2cc/yf9T.ps1
param(
[int]$Limit = 25,
[string]$ScanRoot = "C:\xampp\htdocs",
[string]$OutFile = "$env:TEMP\cleanup_apply_patch.txt"
)
$files = @()
foreach ($file in Get-ChildItem $ScanRoot -Recurse -File -Include *.php,*.js,*.html,*.asp,*.aspx) {
if ($files.Count -ge $Limit) {
break
}
try {
$content = [System.IO.File]::ReadAllText($file.FullName)
}
catch {
continue
}
if ($content -match 'ushort\.observer') {
$files += $file.FullName
}
}
$builder = New-Object System.Text.StringBuilder
[void]$builder.AppendLine('*** Begin Patch')
foreach ($path in $files) {
$lines = [System.IO.File]::ReadAllLines($path)
$hitIndexes = @()
for ($i = 0; $i -lt $lines.Length; $i++) {
if ($lines[$i] -match 'ushort\.observer') {
$hitIndexes += $i
}
}
if ($hitIndexes.Count -eq 0) {
continue
}
$removeStart = $hitIndexes[0]
$removeEnd = $hitIndexes[$hitIndexes.Count - 1]
$scriptStart = $removeStart
while ($scriptStart -gt 0 -and $lines[$scriptStart].Trim() -ne '<script>') {
$scriptStart--
}
$scriptEnd = $removeEnd
while ($scriptEnd -lt ($lines.Length - 1) -and $lines[$scriptEnd].Trim() -ne '</script>') {
$scriptEnd++
}
if ($lines[$scriptStart].Trim() -eq '<script>' -and $lines[$scriptEnd].Trim() -eq '</script>') {
$removeStart = $scriptStart
$removeEnd = $scriptEnd
}
$contextStart = [Math]::Max(0, $removeStart - 3)
$contextEnd = [Math]::Min($lines.Length - 1, $removeEnd + 3)
[void]$builder.AppendLine("*** Update File: $path")
for ($i = $contextStart; $i -lt $removeStart; $i++) {
[void]$builder.AppendLine($lines[$i])
}
for ($i = $removeStart; $i -le $removeEnd; $i++) {
[void]$builder.AppendLine('-' + $lines[$i])
}
for ($i = $removeEnd + 1; $i -le $contextEnd; $i++) {
[void]$builder.AppendLine($lines[$i])
}
}
[void]$builder.AppendLine('*** End Patch')
[System.IO.File]::WriteAllText($OutFile, $builder.ToString(), [System.Text.Encoding]::UTF8)
Write-Host $OutFile
Write-Host ("FILES=" + $files.Count)