Files
INFRAESTRUCTURA/scripts/fix_autologon.ps1
2026-10-03 21:03:27 +02:00

102 lines
4.6 KiB
PowerShell

# Script para CORREGIR autologon y que use el usuario ACTUAL
# Ejecutar como ADMINISTRADOR
param(
[Parameter(Mandatory=$false, HelpMessage="Contraseña/PIN de Windows (si no se proporciona, se pide de forma segura)")]
[string]$Password
)
# Verificar que se ejecuta como Admin
$esAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $esAdmin) {
Write-Host "[ERROR] Este script debe ejecutarse como Administrador." -ForegroundColor Red
Write-Host "Click derecho → 'Ejecutar como administrador'" -ForegroundColor Yellow
exit 1
}
Write-Host "`n=== CONFIGURACION DE AUTOLOGON CORRECTO ===" -ForegroundColor Cyan
# Detectar usuario actual REAL
$username = $env:USERNAME
$computername = $env:COMPUTERNAME
Write-Host "`nUsuario detectado: $computername\$username" -ForegroundColor White
# Pedir contraseña si no se pasó como parámetro
if (-not $Password) {
Write-Host "`nIntroduce tu contraseña/PIN de Windows:" -ForegroundColor Yellow
$securePassword = Read-Host -AsSecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword)
$Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
}
# Verificar la contraseña ANTES de escribir (evita guardar una credencial incorrecta,
# que es lo que dejaba el arranque colgado en la pantalla de login)
Write-Host "`nVerificando credenciales..." -ForegroundColor Cyan
$credencialOk = $false
$tmpVerify = Join-Path $env:TEMP "autologon_verify_$PID.txt"
Remove-Item $tmpVerify -ErrorAction SilentlyContinue
try {
$sec = ConvertTo-SecureString $Password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("$computername\$username", $sec)
Start-Process cmd -ArgumentList "/c whoami > `"$tmpVerify`"" -Credential $cred -Wait -WindowStyle Hidden -ErrorAction Stop
Start-Sleep -Milliseconds 500
$credencialOk = (Test-Path $tmpVerify)
} catch {
$credencialOk = $false
} finally {
Remove-Item $tmpVerify -ErrorAction SilentlyContinue
}
if (-not $credencialOk) {
Write-Host "[ERROR] La contraseña NO es correcta para $computername\$username." -ForegroundColor Red
Write-Host " No se ha modificado el registro. Comprueba la contraseña e inténtalo de nuevo." -ForegroundColor Red
exit 1
}
Write-Host "[OK] Contraseña verificada." -ForegroundColor Green
# Mostrar lo que se va a configurar (SIN mostrar la contraseña)
Write-Host "`nSe configurará autologon con:" -ForegroundColor Cyan
Write-Host " AutoAdminLogon: 1" -ForegroundColor White
Write-Host " DefaultUserName: $username" -ForegroundColor White
Write-Host " DefaultDomainName: $computername" -ForegroundColor White
Write-Host " DefaultPassword: [OCULTA]" -ForegroundColor White
Write-Host "`n¿Continuar? (S/N): " -ForegroundColor Yellow -NoNewline
$respuesta = Read-Host
if ($respuesta -ne "S" -and $respuesta -ne "s") {
Write-Host "[CANCELADO] No se realizaron cambios." -ForegroundColor Gray
exit 0
}
# Aplicar configuración
$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
try {
Set-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $winlogonPath -Name "DefaultUserName" -Value $username
Set-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -Value $Password
Set-ItemProperty -Path $winlogonPath -Name "DefaultDomainName" -Value $computername # CLAVE: nombre del PC, no USERDOMAIN
Write-Host "`n[OK] Autologon configurado correctamente." -ForegroundColor Green
Write-Host "`nAl reiniciar el PC, Windows entrará automáticamente como:" -ForegroundColor Cyan
Write-Host " $computername\$username" -ForegroundColor White
Write-Host "`nPrueba:" -ForegroundColor Yellow
Write-Host " 1. Reinicia el PC" -ForegroundColor White
Write-Host " 2. Verifica que entra sin pedir contraseña" -ForegroundColor White
Write-Host " 3. Si funciona, prueba encendido remoto desde Telegram" -ForegroundColor White
Write-Host "`nPara verificar la configuración:" -ForegroundColor Yellow
Write-Host " .\check_autologon_status.ps1" -ForegroundColor White
Write-Host "`nPara desactivar autologon:" -ForegroundColor Yellow
Write-Host " .\disable_autologon.ps1" -ForegroundColor White
} catch {
Write-Host "`n[ERROR] No se pudo configurar autologon: $_" -ForegroundColor Red
exit 1
}
Write-Host "`n========================================`n" -ForegroundColor Cyan