#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : Signed in with a temporary profile -- "You've been signed in with a temporary profile" Fix : Repair the ProfileList entry Source: https://jbtecwiz.com/support/win-rec-profile-temp Run as : Elevated PowerShell, signed in as a different administrator Expect : 30 minutes Risk : high Reversible : yes WHEN THIS IS THE RIGHT FIX A local profile. The user's data is intact; only the pointer to it is wrong. HOW TO UNDO IT Import profilelist-backup.reg to restore the original entries. 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 # This fix is documented as needing an elevated session. $id = [Security.Principal.WindowsIdentity]::GetCurrent() if (-not (New-Object Security.Principal.WindowsPrincipal $id).IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Host '' Write-Host ' This fix needs an elevated PowerShell.' -ForegroundColor Yellow Write-Host ' Close this window, right-click PowerShell, Run as administrator,' Write-Host ' and run the script again.' Write-Host '' exit 3 } 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 6" 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 ' Signed in with a temporary profile -- "You''ve been signed in with a temporary profile"' -ForegroundColor White Write-Host ' Repair the ProfileList entry' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: high Reversible 30 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 'Tell the user to sign out and not to save anything into the temporary profile -- it is discarded at sign-out.' -Manual Invoke-Step -Number 2 -Do 'Sign in as another administrator and find the entries.' -Command { Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' | ForEach-Object { [PSCustomObject]@{ Key = $_.PSChildName Path = (Get-ItemProperty $_.PSPath).ProfileImagePath State= (Get-ItemProperty $_.PSPath).State } } | Format-Table -AutoSize } Invoke-Step -Number 3 -Do 'Back the whole key up before changing it.' -Command { reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" C:\profilelist-backup.reg /y } Invoke-Step -Number 4 -Do 'You will find two entries for the same SID: one ending .bak pointing at the real profile, and one without pointing at the temporary one. Delete the entry without the suffix, then rename the .bak one to take its place.' -Why 'Windows renames the working entry to .bak when a load fails and creates a fresh one. Swapping them back is the entire fix -- deleting the profile folder, which is the common advice, destroys the user''s data for no reason.' -Manual Invoke-Step -Number 5 -Do 'Set State to 0 and RefCount to 0 on the restored entry.' -Command { $sid = 'S-1-5-21-...' $p = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid" Set-ItemProperty $p -Name State -Value 0 -Type DWord Set-ItemProperty $p -Name RefCount -Value 0 -Type DWord } Invoke-Step -Number 6 -Do 'Restart and have the user sign in.' -Manual Write-Rule " Confirm it worked" Show-Prose 'The user''s desktop, documents and settings are present, and the profile path matches the original folder.' 'White' Write-Host '' if (-not $DryRun) { Get-CimInstance Win32_UserProfile | Format-Table LocalPath,SID,Special,Loaded } 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-rec-profile-temp' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Import profilelist-backup.reg to restore the original entries.' 'DarkGray' Write-Rule