diff --git a/Deploy.bat b/Deploy.bat index 97dae13..04cb417 100644 --- a/Deploy.bat +++ b/Deploy.bat @@ -20,6 +20,7 @@ echo Copying files... copy /Y "%~dp0eDNC-SpecialCharFix.ps1" "%DEST%\" copy /Y "%~dp0Run-eDNCFix.bat" "%DEST%\" copy /Y "%~dp0Install-ScheduledTask.ps1" "%DEST%\" +copy /Y "%~dp0version.ini" "%DEST%\" copy /Y "%~dp0README.md" "%DEST%\" echo. diff --git a/README.md b/README.md index 31790a0..d5a02e7 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,24 @@ Default settings (edit `eDNC-SpecialCharFix.ps1` to change): | IncludeSubfolders | `$true` | Watch subdirectories | | CharactersToRemove | `@(255)` | Byte values to strip (0xFF) | +## Auto-Update + +The script automatically checks for updates every 5 minutes by reading: +``` +S:\DT\cameron\eDNC-Fix\version.ini +``` + +**To deploy an update:** +1. Update `version.ini` with the new version number +2. Copy new files to `S:\DT\cameron\eDNC-Fix\` +3. Running instances will auto-update within 5 minutes + +**version.ini format:** +```ini +[eDNC-Fix] +Version=1.4.0 +``` + ## Output The script displays real-time activity: @@ -112,6 +130,7 @@ The script uses exponential backoff (500ms → 1s → 2s → 4s → up to 16s) f | Version | Date | Changes | |---------|------|---------| +| 1.4.0 | 2025-12-12 | Auto-update from S:\DT\cameron\eDNC-Fix\version.ini every 5 min | | 1.3.1 | 2025-12-12 | Added Install-ScheduledTask.ps1 for running as SYSTEM service | | 1.3.0 | 2025-12-12 | Fixed header UI, live status/stats, auto-elevate to Administrator | | 1.2.1 | 2025-12-12 | Added GE Aerospace ASCII banner | diff --git a/eDNC-SpecialCharFix.ps1 b/eDNC-SpecialCharFix.ps1 index b290a62..540335e 100644 --- a/eDNC-SpecialCharFix.ps1 +++ b/eDNC-SpecialCharFix.ps1 @@ -36,9 +36,13 @@ .NOTES Author: GE Aerospace - Rutland - Version: 1.3.0 + Version: 1.4.0 Date: 2025-12-12 + v1.4.0 - Auto-update: + - Checks S:\DT\cameron\eDNC-Fix\version.ini every 5 minutes + - Auto-downloads and restarts if newer version found + v1.3.0 - Fixed header UI: - GE Aerospace ASCII banner stays at top - Live status updates in header (Processing, Cleaned, Failed) @@ -74,9 +78,15 @@ param( ) # Script info -$ScriptVersion = "1.3.0" +$ScriptVersion = "1.4.0" $ScriptName = "eDNC Special Character Fix" +# Auto-update settings +$UpdateSource = "S:\DT\cameron\eDNC-Fix" +$LocalPath = "C:\eDNC-Fix" +$UpdateCheckInterval = 300 # Check every 5 minutes (in seconds) +$script:LastUpdateCheck = [DateTime]::MinValue + # Header display function function Show-Header { param([int]$Cleaned = 0, [int]$Failed = 0, [string]$Status = "Watching...") @@ -134,6 +144,67 @@ function Show-Header { return $headerLines.Count } +# Auto-update function +function Check-ForUpdate { + $versionFile = Join-Path $UpdateSource "version.ini" + + # Skip if source not available + if (-not (Test-Path $versionFile)) { + return $false + } + + try { + # Read version from INI file + $content = Get-Content $versionFile -Raw + if ($content -match 'Version=(\d+\.\d+\.\d+)') { + $remoteVersion = [version]$matches[1] + $localVersion = [version]$ScriptVersion + + if ($remoteVersion -gt $localVersion) { + return $remoteVersion.ToString() + } + } + } + catch { + # Silently fail if can't read + } + + return $false +} + +function Invoke-Update { + param([string]$NewVersion) + + Write-Host "" + Write-Host " [UPDATE] New version $NewVersion available!" -ForegroundColor Magenta + Write-Host " [UPDATE] Downloading update..." -ForegroundColor Magenta + + try { + # Copy new files + $files = @("eDNC-SpecialCharFix.ps1", "Run-eDNCFix.bat", "Install-ScheduledTask.ps1", "version.ini") + foreach ($file in $files) { + $src = Join-Path $UpdateSource $file + $dst = Join-Path $LocalPath $file + if (Test-Path $src) { + Copy-Item -Path $src -Destination $dst -Force + } + } + + Write-Host " [UPDATE] Update complete! Restarting..." -ForegroundColor Magenta + Start-Sleep -Seconds 2 + + # Restart the script + $scriptPath = Join-Path $LocalPath "eDNC-SpecialCharFix.ps1" + Start-Process powershell.exe -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" -WindowStyle Normal + + # Exit current instance + exit 0 + } + catch { + Write-Host " [UPDATE] Update failed: $($_.Exception.Message)" -ForegroundColor Red + } +} + # Initialize console Clear-Host $script:HeaderHeight = Show-Header -Status "Initializing..." @@ -313,6 +384,16 @@ $null = Register-ObjectEvent -InputObject $watcher -EventName Changed -Action $a try { while ($true) { Start-Sleep -Seconds 1 + + # Periodic update check + $now = Get-Date + if (($now - $script:LastUpdateCheck).TotalSeconds -ge $UpdateCheckInterval) { + $script:LastUpdateCheck = $now + $newVersion = Check-ForUpdate + if ($newVersion) { + Invoke-Update -NewVersion $newVersion + } + } } } finally { diff --git a/version.ini b/version.ini new file mode 100644 index 0000000..9b9e9ac --- /dev/null +++ b/version.ini @@ -0,0 +1,2 @@ +[eDNC-Fix] +Version=1.4.0