#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : Outlook keeps asking for a password and will not accept it Fix : Build a fresh mail profile Source: https://jbtecwiz.com/support/win-app-outlook-password Run as : Control Panel -> Mail Expect : 45 minutes Risk : medium Reversible : yes WHEN THIS IS THE RIGHT FIX Neither of the above worked. A damaged profile cannot be repaired reliably and rebuilding is faster than trying. HOW TO UNDO IT The old profile remains until you delete it -- switch back at the profile prompt. This script walks the fix one step at a time and asks before each one. Steps with no command are things you do yourself -- it prints those and waits. Run with -DryRun to print without executing. -------------------------------------------------------------------- NO WARRANTY - USE AT YOUR OWN RISK This script is provided by JbTecWiz as-is and with no warranty of any kind, express or implied. You run it entirely at your own risk. JbTecWiz accepts no liability for any loss or damage arising from its use, including but not limited to data loss, downtime, or configuration changes that turn out to be wrong for your system. You are responsible for reading this script before running it, for satisfying yourself that it suits the machine in front of you, and for having a working backup first. Some steps cannot be undone. -------------------------------------------------------------------- #> [CmdletBinding()] param( # Print every step and command without running anything. [switch]$DryRun, # Do not ask before each step. Read the script first if you use this. [switch]$Unattended ) $ErrorActionPreference = 'Stop' $script:Failed = 0 function Write-Rule { param([string]$Text) Write-Host '' Write-Host ('-' * 70) -ForegroundColor DarkGray if ($Text) { Write-Host $Text -ForegroundColor Cyan } } function Show-Prose { param([string]$Text, [string]$Colour = "Gray") if (-not $Text) { return } $words = $Text -split "\s+"; $line = " " foreach ($w in $words) { if (($line.Length + $w.Length) -gt 74) { Write-Host $line -ForegroundColor $Colour; $line = " " } $line += "$w " } if ($line.Trim()) { Write-Host $line -ForegroundColor $Colour } } function Invoke-Step { param( [int]$Number, [string]$Do, [string]$Why, [scriptblock]$Command, [switch]$Manual, [string]$Shell = "powershell" ) Write-Rule " Step $Number of 5" Show-Prose $Do "White" if ($Why) { Write-Host ""; Show-Prose $Why "DarkGray" } if ($Manual) { Write-Host '' Write-Host ' -> Do this yourself, then press Enter to carry on.' -ForegroundColor Yellow if (-not $Unattended -and -not $DryRun) { [void](Read-Host) } return } Write-Host '' foreach ($l in ($Command.ToString().Trim() -split "`n")) { Write-Host (" " + $l.Trim()) -ForegroundColor Green } Write-Host '' if ($DryRun) { Write-Host " (dry run -- not executed)" -ForegroundColor DarkGray; return } if (-not $Unattended) { $a = Read-Host " Run this step? [Y]es / [S]kip / [Q]uit" if ($a -match "^[Qq]") { Write-Host " Stopped at your request."; exit 0 } if ($a -match "^[Ss]") { Write-Host " Skipped." -ForegroundColor DarkGray; return } } try { & $Command } catch { $script:Failed++ Write-Host (" Step $Number failed: " + $_.Exception.Message) -ForegroundColor Red Show-Prose "The rest of the fix may depend on this. Read the write-up before carrying on." "Red" if (-not $Unattended) { $c = Read-Host " Carry on anyway? [y/N]" if ($c -notmatch "^[Yy]") { exit 1 } } } } Write-Rule Write-Host ' Outlook keeps asking for a password and will not accept it' -ForegroundColor White Write-Host ' Build a fresh mail profile' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium Reversible 45 minutes' Write-Host '' Show-Prose 'No warranty. Use at your own risk - JbTecWiz accepts no liability. Read it before you run it, and have a backup.' 'DarkYellow' Write-Rule if (-not $Unattended -and -not $DryRun) { $go = Read-Host ' Ready? [y/N]' if ($go -notmatch "^[Yy]") { Write-Host " Nothing was changed."; exit 0 } } Invoke-Step -Number 1 -Do 'Note the account details and any PST files in use before starting.' -Command { cmd.exe /c 'control mlcfg32.cpl' } Invoke-Step -Number 2 -Do 'Create a new profile rather than modifying the existing one, and set Outlook to prompt for a profile so you can switch back.' -Manual Invoke-Step -Number 3 -Do 'Add the account and let autodiscover configure it. Do not use manual settings for a Microsoft 365 mailbox -- the manual path skips modern authentication and reintroduces the prompt loop.' -Manual Invoke-Step -Number 4 -Do 'Re-attach any PST files by File -> Open & Export -> Open Outlook Data File.' -Why 'Local PST archives are not re-added by a new profile, and their absence is the thing most likely to be reported as data loss after this fix. Re-attaching is two clicks if you noted the paths first.' -Manual Invoke-Step -Number 5 -Do 'Once the new profile is proven, set it as default and remove the old one.' -Manual Write-Rule " Confirm it worked" Show-Prose 'Mail sends and receives, the folder list is complete, and archives are present.' 'White' Write-Rule if ($script:Failed -gt 0) { Write-Host (" Finished with " + $script:Failed + " failed step(s).") -ForegroundColor Yellow Show-Prose 'Read the full write-up at https://jbtecwiz.com/support/win-app-outlook-password' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: The old profile remains until you delete it -- switch back at the profile prompt.' 'DarkGray' Write-Rule