sync: auto-sync from ACG-TECH03L at 2026-04-17 23:51:18
Author: Howard Enos Machine: ACG-TECH03L Timestamp: 2026-04-17 23:51:18
This commit is contained in:
64
clients/cascades-tucson/scripts/fix-live-shellfolders.ps1
Normal file
64
clients/cascades-tucson/scripts/fix-live-shellfolders.ps1
Normal file
@@ -0,0 +1,64 @@
|
||||
# Live-hive shell-folder repair for a logged-in user whose Documents/Downloads
|
||||
# sidebar is showing "this file has no associated app" after a folder-redirection
|
||||
# GPO applies only the legacy (Personal) name but not the modern KnownFolder GUID.
|
||||
#
|
||||
# WHEN TO USE
|
||||
# The Folder Redirection CSE has written the UNC path to `Personal` / etc,
|
||||
# but the matching GUID value ({FDD39AD0-...} for Documents,
|
||||
# {374DE290-...} for Downloads) is still pointing at a local path, so
|
||||
# clicking the sidebar item tries to open the local folder and fails.
|
||||
#
|
||||
# HOW TO RUN
|
||||
# ScreenConnect Backstage PowerShell. User SHOULD be logged in so the hive
|
||||
# is live. Edit $SID and $UNCBase at the top before running.
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$SID,
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$UNCBase # e.g. '\\CS-SERVER\homes\Sharon.Edwards'
|
||||
)
|
||||
|
||||
$USF = "HKU\$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
|
||||
$SF = "HKU\$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
|
||||
|
||||
Write-Host "=== BEFORE ==="
|
||||
reg query "$USF" /v "Personal" 2>$null
|
||||
reg query "$USF" /v "{FDD39AD0-238F-46AF-ADB4-6C85480369C7}" 2>$null
|
||||
reg query "$USF" /v "{374DE290-123F-4565-9164-39C4925E467B}" 2>$null
|
||||
|
||||
$docsUNC = "$UNCBase\Documents"
|
||||
$dlUNC = "$UNCBase\Downloads"
|
||||
|
||||
# Documents - both legacy + GUID so the Explorer sidebar resolves cleanly
|
||||
reg add "$USF" /v "Personal" /t REG_EXPAND_SZ /d $docsUNC /f | Out-Null
|
||||
reg add "$USF" /v "{FDD39AD0-238F-46AF-ADB4-6C85480369C7}" /t REG_EXPAND_SZ /d $docsUNC /f | Out-Null
|
||||
reg add "$SF" /v "Personal" /t REG_SZ /d $docsUNC /f | Out-Null
|
||||
reg add "$SF" /v "My Documents" /t REG_SZ /d $docsUNC /f | Out-Null
|
||||
|
||||
# Downloads - modern GUID is the one the sidebar uses
|
||||
reg add "$USF" /v "{374DE290-123F-4565-9164-39C4925E467B}" /t REG_EXPAND_SZ /d $dlUNC /f | Out-Null
|
||||
reg add "$SF" /v "{374DE290-123F-4565-9164-39C4925E467B}" /t REG_SZ /d $dlUNC /f | Out-Null
|
||||
|
||||
Write-Host "`n=== AFTER ==="
|
||||
reg query "$USF" /v "Personal"
|
||||
reg query "$USF" /v "{FDD39AD0-238F-46AF-ADB4-6C85480369C7}"
|
||||
reg query "$USF" /v "{374DE290-123F-4565-9164-39C4925E467B}"
|
||||
|
||||
# Respawn Explorer for the logged-in user so the new values are picked up.
|
||||
# Look up by SID rather than by username to avoid locale/spelling issues.
|
||||
$user = (Get-CimInstance Win32_UserAccount | Where-Object { $_.SID -eq $SID }).Name
|
||||
if ($user) {
|
||||
Write-Host "`n=== Restarting Explorer for $user ==="
|
||||
Get-Process explorer -IncludeUserName -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.UserName -like "*\$user" -or $_.UserName -like "$user" } |
|
||||
ForEach-Object { Write-Host "Killing PID $($_.Id) owner=$($_.UserName)"; Stop-Process -Id $_.Id -Force }
|
||||
Start-Sleep 3
|
||||
Get-Process explorer -IncludeUserName -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.UserName -like "*\$user" -or $_.UserName -like "$user" } |
|
||||
Select-Object Id, UserName, StartTime | Format-Table -AutoSize
|
||||
} else {
|
||||
Write-Host "`n[WARN] Could not resolve SID to a username - user may need to sign out and back in for sidebar to refresh."
|
||||
}
|
||||
Reference in New Issue
Block a user