============================================================ Schedule-Maintenance.ps1 - Documentation ============================================================ Wrapper script that stores credentials securely and runs Invoke-RemoteMaintenance.ps1 unattended or on a schedule via Windows Task Scheduler. ============================================================ REQUIREMENTS ============================================================ - PowerShell 5.1+ - Run as Administrator (required for scheduling only) - ALL scripts must be in the SAME folder: Invoke-RemoteMaintenance.ps1 Schedule-Maintenance.ps1 Export-PCList.ps1 shopfloor-pcs.txt (or your PC list file) ============================================================ PARAMETERS ============================================================ -SaveCredential Save credentials for unattended use -Username Domain\username (use with -SaveCredential) -Password Password (use with -SaveCredential) -Task Maintenance task name (e.g. Reboot) -ComputerListFile Path to text file with PC hostnames -CreateScheduledTask Register a Windows Scheduled Task -TaskFrequency Daily, Weekly, or Once (default: Weekly) -TaskDay Day of week (default: Sunday) -TaskTime Time in HH:mm format (default: 03:00) -TaskDate Specific date for Once (e.g. 2026-02-22) ============================================================ STEP 1: Save Credentials (one time) ============================================================ .\Schedule-Maintenance.ps1 -SaveCredential -Username "DS\570005354" -Password "MyP@ssw0rd" - Encrypted with AES-256 key - Works from normal or admin PowerShell - Stored in .creds\ folder (not plaintext) - Re-run if your password changes ============================================================ STEP 2: Generate PC List ============================================================ # All shopfloor PCs from API .\Export-PCList.ps1 # Filter by type .\Export-PCList.ps1 -PcType Shopfloor # Single PC for testing "G63TVG04ESF" | Out-File -FilePath ".\test-reboot.txt" -Encoding UTF8 ============================================================ STEP 3: Run or Schedule ============================================================ RUN IMMEDIATELY (no admin needed): .\Schedule-Maintenance.ps1 -ComputerListFile ".\shopfloor-pcs.txt" -Task Reboot SCHEDULE ONE-TIME (admin required): .\Schedule-Maintenance.ps1 -CreateScheduledTask -ComputerListFile ".\shopfloor-pcs.txt" -Task Reboot -TaskFrequency Once -TaskTime "00:01" -TaskDate "2026-02-22" SCHEDULE RECURRING (admin required): .\Schedule-Maintenance.ps1 -CreateScheduledTask -ComputerListFile ".\shopfloor-pcs.txt" -Task Reboot -TaskFrequency Weekly -TaskDay Sunday -TaskTime "00:01" ============================================================ CHECKING RESULTS ============================================================ AFTER A SCHEDULED RUN: Get-Content ".\logs\LAST-RUN-SUMMARY.txt" FULL LOG (most recent): Get-ChildItem ".\logs\" -Filter "maintenance-*-Reboot.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | Get-Content CHECK IF TASK RAN: Get-ScheduledTask -TaskName "ShopfloorMaintenance-Reboot" | Get-ScheduledTaskInfo LastTaskResult = 0 means success Anything else means it errored before writing logs LOGS LOCATION: .\logs\ (inside your scripts folder) ============================================================ MANAGING SCHEDULED TASKS ============================================================ # List maintenance tasks Get-ScheduledTask | Where-Object { $_.TaskName -like "ShopfloorMaintenance*" } # Run now (don't wait for schedule) Start-ScheduledTask -TaskName "ShopfloorMaintenance-Reboot" # Delete a task Unregister-ScheduledTask -TaskName "ShopfloorMaintenance-Reboot" # Or use: Task Scheduler GUI (taskschd.msc) ============================================================ AVAILABLE TASKS ============================================================ Reboot, DISM, SFC, OptimizeDisk, DiskCleanup, ClearUpdateCache, ClearBrowserCache, RestartSpooler, FlushDNS, RestartWinRM, SetTimezone, SyncTime, UpdateEMxAuthToken, DeployUDCWebServerConfig, UpdateDNCMXHosts, InstallDashboard, InstallLobbyDisplay, UninstallDashboard, UninstallLobbyDisplay ============================================================ TROUBLESHOOTING ============================================================ "No saved credentials found" -> .\Schedule-Maintenance.ps1 -SaveCredential -Username "DS\user" -Password "pass" "Access is denied" when scheduling -> Right-click PowerShell -> Run as Administrator "No credentials provided. Exiting." -> Use -Username and -Password flags instead of GUI prompt No logs folder / empty logs -> Task may not have run yet. Check: Get-ScheduledTask -TaskName "ShopfloorMaintenance-Reboot" | Get-ScheduledTaskInfo Password changed -> .\Schedule-Maintenance.ps1 -SaveCredential -Username "DS\user" -Password "newpass" NOTE ABOUT "Running as AEROAD\SSO": This is normal. The scheduled task runs as your Windows login. It still uses your SAVED credentials for WinRM connections to the remote shopfloor PCs. Two separate accounts: 1. Your Windows login = runs the script 2. Saved credentials = connects to remote PCs