Files
system-automations/Update-Discord.ps1
T
2026-06-18 08:17:17 -05:00

82 lines
2.9 KiB
PowerShell

# Update-Discord.ps1
# Closes Discord if open, checks for updates, launches Discord to apply them, then closes Discord once done.
$DiscordDir = "$env:LocalAppData\Discord"
$LogFile = Join-Path $PSScriptRoot "Update-Discord.log"
function Log-Message {
param([string]$Message)
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$LogLine = "[$Timestamp] $Message"
Write-Output $LogLine
Add-Content -Path $LogFile -Value $LogLine -ErrorAction SilentlyContinue
}
Log-Message "Starting Discord daily update task..."
# Ensure we are in the correct working directory
if (Test-Path $DiscordDir) {
Set-Location -Path $DiscordDir
Log-Message "Working directory set to: $DiscordDir"
} else {
Log-Message "Error: Discord directory not found at $DiscordDir. Exiting."
Exit 1
}
# 1. Close Discord if open
$DiscordProcesses = Get-Process -Name "Discord" -ErrorAction SilentlyContinue
if ($DiscordProcesses) {
Log-Message "Closing active Discord processes..."
$DiscordProcesses | Stop-Process -Force
Start-Sleep -Seconds 5
} else {
Log-Message "Discord is not running."
}
# 2. Run Update.exe --update
if (Test-Path "Update.exe") {
Log-Message "Running Update.exe --update..."
$UpdateProcess = Start-Process -FilePath "Update.exe" -ArgumentList "--update=https://discord.com/api/updates/stable?platform=win" -Wait -PassThru -NoNewWindow
Log-Message "Update.exe --update completed with exit code: $($UpdateProcess.ExitCode)"
} else {
Log-Message "Error: Update.exe not found. Exiting."
Exit 1
}
# 3. Run Update.exe --processStart Discord.exe
Log-Message "Running Update.exe --processStart Discord.exe..."
$LaunchProcess = Start-Process -FilePath "Update.exe" -ArgumentList "--processStart Discord.exe" -PassThru -NoNewWindow
Log-Message "Discord launch triggered."
# 4. Wait for Discord process to start
Log-Message "Waiting for Discord process to start..."
$Started = $false
for ($i = 1; $i -le 30; $i++) {
if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) {
$Started = $true
Log-Message "Discord process detected after $i seconds."
break
}
Start-Sleep -Seconds 1
}
if ($Started) {
# Give Discord time to complete its checking and update process (installing updates, updating files, database migration)
Log-Message "Waiting 60 seconds for Discord update process to complete..."
Start-Sleep -Seconds 60
# 5. Immediately close Discord once the update process is complete
Log-Message "Closing Discord..."
$CloseProcesses = Get-Process -Name "Discord" -ErrorAction SilentlyContinue
if ($CloseProcesses) {
$CloseProcesses | Stop-Process -Force
Log-Message "Discord successfully closed."
} else {
Log-Message "Discord was already closed."
}
} else {
Log-Message "Error: Discord process did not start within 30 seconds."
}
Log-Message "Discord update task completed."