Files
win-remote-toolkit/scripts/powershell/rename-hide-accounts.ps1
2026-04-24 17:44:02 +08:00

52 lines
1.9 KiB
PowerShell

[Console]::OutputEncoding = [Text.Encoding]::UTF8
$ErrorActionPreference = 'Stop'
# --- 1. Rename local account 'user' -> 'User' ---
$src = 'user'
$dst = 'User'
$u = Get-LocalUser -Name $src -ErrorAction SilentlyContinue
if ($u) {
if ($u.Name -ceq $dst) {
Write-Host "[=] Account is already '$dst'"
} else {
Write-Host "[*] Renaming local account '$($u.Name)' -> '$dst'"
Rename-LocalUser -Name $src -NewName $dst
Write-Host "[OK] Renamed"
}
} else {
$already = Get-LocalUser -Name $dst -ErrorAction SilentlyContinue
if ($already) {
Write-Host "[=] Account '$dst' already exists (no '$src' found). Nothing to rename."
} else {
throw "Neither '$src' nor '$dst' exists as local user"
}
}
# --- 2. Hide 'Admin' from sign-in screen ---
$listPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList'
if (-not (Test-Path $listPath)) {
New-Item -Path $listPath -Force | Out-Null
Write-Host "[*] Created $listPath"
}
New-ItemProperty -Path $listPath -Name 'Admin' -Value 0 -PropertyType DWord -Force | Out-Null
Write-Host "[OK] Hidden 'Admin' from sign-in screen (SpecialAccounts\UserList\Admin = 0)"
Write-Host ""
Write-Host "=== Post-state ==="
Get-LocalUser | Select-Object Name,Enabled,LastLogon | Format-Table -AutoSize
$lst = Get-ItemProperty -Path $listPath -ErrorAction SilentlyContinue
if ($lst) {
Write-Host "UserList values:"
$lst.PSObject.Properties | Where-Object { $_.Name -notmatch '^PS' } | ForEach-Object {
Write-Host (" {0} = {1}" -f $_.Name, $_.Value)
}
}
Write-Host ""
Write-Host "Notes:"
Write-Host " - Account SIDs don't change. C:\Users\user profile folder stays with lowercase name"
Write-Host " (NTFS is case-insensitive so all apps keep working)."
Write-Host " - Admin can still sign in: click 'Other user' on the lock screen and type 'Admin'."