Initial commit
This commit is contained in:
97
scripts/powershell/set-user-desktop-icons.ps1
Normal file
97
scripts/powershell/set-user-desktop-icons.ps1
Normal file
@@ -0,0 +1,97 @@
|
||||
[Console]::OutputEncoding = [Text.Encoding]::UTF8
|
||||
$ErrorActionPreference = 'Continue'
|
||||
|
||||
Write-Host "[*] Setting desktop icons for User account"
|
||||
|
||||
# Icon GUIDs
|
||||
$computerGUID = "{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
|
||||
$controlPanelGUID = "{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}"
|
||||
$recycleGUID = "{645FF040-5081-101B-9F08-00AA002F954E}"
|
||||
|
||||
# Get User SID
|
||||
try {
|
||||
$user = New-Object System.Security.Principal.NTAccount("User")
|
||||
$userSID = $user.Translate([System.Security.Principal.SecurityIdentifier]).Value
|
||||
Write-Host "[*] User SID: $userSID"
|
||||
} catch {
|
||||
Write-Host "[!] Could not get user SID, trying alternative method"
|
||||
|
||||
# Try to get SID from registry
|
||||
$userProfiles = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
|
||||
foreach ($profile in $userProfiles) {
|
||||
$profileData = Get-ItemProperty -Path $profile.PSPath -ErrorAction SilentlyContinue
|
||||
if ($profileData.ProfileImagePath -like "*\User") {
|
||||
$userSID = $profile.PSChildName
|
||||
Write-Host "[*] Found User SID: $userSID"
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $userSID) {
|
||||
Write-Host "[!] Could not determine User SID" -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if user hive is loaded (user is logged in)
|
||||
$userHivePath = "HKU:\$userSID"
|
||||
|
||||
if (Test-Path $userHivePath) {
|
||||
Write-Host "[*] User is currently logged in, modifying active hive"
|
||||
|
||||
$desktopIconsPath = "$userHivePath\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel"
|
||||
$classicIconsPath = "$userHivePath\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu"
|
||||
|
||||
# Ensure registry paths exist
|
||||
foreach ($path in @($desktopIconsPath, $classicIconsPath)) {
|
||||
if (-not (Test-Path $path)) {
|
||||
New-Item -Path $path -Force | Out-Null
|
||||
Write-Host " Created registry path"
|
||||
}
|
||||
}
|
||||
|
||||
# Enable desktop icons
|
||||
$icons = @{
|
||||
"Computer" = $computerGUID
|
||||
"Control Panel" = $controlPanelGUID
|
||||
"Recycle Bin" = $recycleGUID
|
||||
}
|
||||
|
||||
foreach ($iconName in $icons.Keys) {
|
||||
$guid = $icons[$iconName]
|
||||
Set-ItemProperty -Path $desktopIconsPath -Name $guid -Value 0 -Type DWord
|
||||
Set-ItemProperty -Path $classicIconsPath -Name $guid -Value 0 -Type DWord
|
||||
Write-Host " Enabled: $iconName"
|
||||
}
|
||||
|
||||
Write-Host "[*] Refreshing desktop for logged-in user"
|
||||
|
||||
# Create a script to run as the user to refresh the desktop
|
||||
$refreshScript = @"
|
||||
Add-Type -TypeDefinition 'using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] public static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); [DllImport("user32.dll")] public static extern IntPtr GetDesktopWindow(); }'
|
||||
[Win32]::InvalidateRect([Win32]::GetDesktopWindow(), [IntPtr]::Zero, $true)
|
||||
"@
|
||||
|
||||
try {
|
||||
# Try to refresh the desktop
|
||||
Invoke-Expression $refreshScript
|
||||
Write-Host " Desktop refresh attempted"
|
||||
} catch {
|
||||
Write-Host " Could not refresh desktop automatically"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "[OK] Desktop icons configured for active User session"
|
||||
Write-Host "Icons should appear shortly. If not visible:"
|
||||
Write-Host "1. Right-click desktop > Refresh"
|
||||
Write-Host "2. Log out and log back in as User"
|
||||
|
||||
} else {
|
||||
Write-Host "[*] User is not currently logged in"
|
||||
Write-Host "[!] Cannot modify registry while user is logged out"
|
||||
Write-Host ""
|
||||
Write-Host "Please:"
|
||||
Write-Host "1. Log in as User"
|
||||
Write-Host "2. Run this script again"
|
||||
Write-Host "3. Or reboot and log in as User, then run the script"
|
||||
}
|
||||
Reference in New Issue
Block a user