# GYXX Flow 开机自启:启用/关闭 Windows 自动登录 # # 背景:控制台+调度器的自启链是 # 开机 → 自动登录进桌面 → Startup\gyxx-keepalive.vbs → keepalive → 控制台(8765)+调度器 # 唯一缺口是 AutoAdminLogon(默认 0,重启后停在登录界面,Startup 不触发)。 # 采集依赖浏览器 CDP,必须跑在交互式用户会话,因此不能用服务/Task Scheduler SYSTEM 替代。 # # 启用(交互输入密码,不会留在命令历史): # powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 # 撤销: # powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 -Disable # # 注意:DefaultPassword 以明文存于 HKLM Winlogon(仅 Administrators 可读), # 内网采集机可接受;介意安全性请改用 Sysinternals Autologon.exe(LSA secret 存储)。 param( [switch]$Disable ) $winlogon = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' if ($Disable) { Set-ItemProperty $winlogon -Name AutoAdminLogon -Value '0' Remove-ItemProperty $winlogon -Name DefaultPassword -ErrorAction SilentlyContinue Write-Host '已关闭自动登录(DefaultPassword 已清除)。' -ForegroundColor Yellow exit 0 } $pwd1 = Read-Host -AsSecureString "输入 $env:USERNAME 的 Windows 登录密码" $pwd2 = Read-Host -AsSecureString '再输一次确认' $plain1 = [Net.NetworkCredential]::new('', $pwd1).Password $plain2 = [Net.NetworkCredential]::new('', $pwd2).Password if ($plain1 -ne $plain2) { throw '两次输入不一致,未做任何修改。' } if ([string]::IsNullOrEmpty($plain1)) { Write-Warning '密码为空:策略 LimitBlankPasswordUse=1 会拒绝空密码自动登录,请先给账户设置密码。' exit 1 } Set-ItemProperty $winlogon -Name AutoAdminLogon -Value '1' Set-ItemProperty $winlogon -Name DefaultUserName -Value $env:USERNAME Set-ItemProperty $winlogon -Name DefaultDomainName -Value $env:COMPUTERNAME Set-ItemProperty $winlogon -Name DefaultPassword -Value $plain1 # AutoLogonCount 每次自动登录会递减,删掉表示不限次数 Remove-ItemProperty $winlogon -Name AutoLogonCount -ErrorAction SilentlyContinue Write-Host '自动登录已启用。' -ForegroundColor Green Write-Host '验证方式:挑空闲时间重启一次,开机应自动进桌面,约 2 分钟内控制台(127.0.0.1:8765)与调度器就位;' Write-Host '也可查看 D:\gyxx-flow\var\logs\keepalive\keepalive.log 出现 keepalive-start / scheduler-restarted / console-restarted。'