Public/AutoStart.ps1
|
# --------------------------------------------------------------------------- # Auto-start / Auto-reload # --------------------------------------------------------------------------- function Install-TTAutoStart { <# .SYNOPSIS Register TerminalTracker to start with Windows via Task Scheduler. .DESCRIPTION Creates a scheduled task that runs at logon to start the monitor, resume suspended sessions, and begin tracking. Falls back to a startup folder shortcut if Task Scheduler registration fails. .EXAMPLE Install-TTAutoStart Registers TerminalTracker to start automatically at Windows logon. #> [CmdletBinding()] param() $taskName = 'TerminalTracker-AutoStart' $modulePath = Join-Path (Split-Path $PSScriptRoot -Parent) 'TerminalTracker.psd1' $command = "Import-Module '$modulePath' -Force -DisableNameChecking; if ((Get-TTConfig).AutoReload) { Resume-TTSession -All }; Start-TTTray" $action = New-ScheduledTaskAction -Execute 'pwsh.exe' -Argument "-WindowStyle Hidden -NoProfile -Command `"$command`"" $trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable try { $existing = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue if ($existing) { Set-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings | Out-Null } else { Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description 'TerminalTracker session monitor and auto-reload' | Out-Null } Write-Verbose "Auto-start registered: $taskName" # Update config $cfg = Get-TTConfig $cfg.AutoStart = $true Write-JsonFile $script:ConfigFile $cfg } catch { Write-Warning "Failed to register scheduled task: $_" Write-Warning "Try running as administrator, or use the startup folder method instead." Install-TTAutoStartViaStartup } } function Install-TTAutoStartViaStartup { <# .SYNOPSIS Fallback: add a shortcut to the Startup folder. #> [CmdletBinding()] param() $startupDir = [Environment]::GetFolderPath('Startup') $shortcutPath = Join-Path $startupDir 'TerminalTracker.lnk' $modulePath = Join-Path (Split-Path $PSScriptRoot -Parent) 'TerminalTracker.psd1' $command = "Import-Module '$modulePath' -Force -DisableNameChecking; if ((Get-TTConfig).AutoReload) { Resume-TTSession -All }; Start-TTTray" $shell = New-Object -ComObject WScript.Shell $shortcut = $shell.CreateShortcut($shortcutPath) $shortcut.TargetPath = 'pwsh.exe' $shortcut.Arguments = "-WindowStyle Hidden -NoProfile -Command `"$command`"" $shortcut.WindowStyle = 7 # Minimized $shortcut.Description = 'TerminalTracker auto-start' $shortcut.Save() Write-Verbose "Startup shortcut created at: $shortcutPath" } function Remove-TTAutoStart { <# .SYNOPSIS Remove TerminalTracker from Windows auto-start. .DESCRIPTION Removes the scheduled task and startup folder shortcut used for auto-starting TerminalTracker at Windows logon. .EXAMPLE Remove-TTAutoStart Removes TerminalTracker from Windows auto-start. #> [CmdletBinding(SupportsShouldProcess)] param() # Remove scheduled task $taskName = 'TerminalTracker-AutoStart' try { Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction Stop Write-Verbose "Scheduled task '$taskName' removed." } catch { Write-Verbose "No scheduled task found (or access denied)." } # Remove startup shortcut if present $startupDir = [Environment]::GetFolderPath('Startup') $shortcutPath = Join-Path $startupDir 'TerminalTracker.lnk' if (Test-Path $shortcutPath) { Remove-Item $shortcutPath -Force Write-Verbose "Startup shortcut removed." } # Update config $cfg = Get-TTConfig $cfg.AutoStart = $false Write-JsonFile $script:ConfigFile $cfg } |