RunOnce开机不运行求助:启动脚本重启后无法执行
我之前也碰到过类似的自动登录+RunOnce脚本不运行的坑,咱们一步步来排查和解决你的情况:
你的需求是让系统依次执行脚本、重启循环,但现在设置了自动登录和RunOnce注册表项后,自动登录完成却完全没触发PowerShell脚本。结合你的代码,主要有几个关键问题需要修正:
1. 注册表路径存在多余空格(自动登录设置失效)
你的原代码里Winlogon的路径写错了:
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion \Winlogon"
CurrentVersion后面多了一个空格,这会导致PowerShell找不到这个注册表项,自动登录的设置根本没生效,这是核心问题之一!必须把空格去掉,改成正确的路径:HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
2. ~路径无法在RunOnce中被解析
~是PowerShell专属的用户主目录缩写,但RunOnce注册表项是由系统加载的,它不认识~这个符号,所以~\Downloads\systemrename.ps1会被当成无效路径,PowerShell自然找不到脚本。
你需要用$env:USERPROFILE来获取当前用户的完整主目录路径,这样拼接出来的路径是系统能识别的绝对路径。
3. PowerShell执行策略限制
默认情况下,Windows的PowerShell执行策略可能会阻止未签名的脚本运行,即使路径正确,也可能因为执行策略导致脚本无法启动。我们需要在调用PowerShell时加上-ExecutionPolicy Bypass参数,临时绕过执行策略限制。
4. 路径的引号包裹(避免空格问题)
如果用户主目录路径里包含空格(比如用户名是John Doe),拼接后的路径会有空格,导致PowerShell无法正确识别脚本路径。所以需要把脚本路径用双引号括起来,确保路径被完整识别。
修改后的完整脚本
# 设置自动登录(修复注册表路径空格问题) $RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" $DefaultUsername = Read-Host -Prompt "User's O365 Cred" $DefaultPassword = Read-Host -Prompt "User's O365 Pass" Set-ItemProperty $RegPath "AutoAdminLogon" -Value "1" -Type String Set-ItemProperty $RegPath "DefaultUsername" -Value $DefaultUsername -Type String Set-ItemProperty $RegPath "DefaultPassword" -Value $DefaultPassword -Type String # 配置RunOnce项(修复路径、执行策略和引号问题) $RunOnceKey = "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce" $ScriptPath = Join-Path $env:USERPROFILE "Downloads\systemrename.ps1" # 用引号包裹路径,加上执行策略参数,确保命令能正确执行 $Command = "C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe -ExecutionPolicy Bypass -File `"$ScriptPath`"" Set-ItemProperty $RunOnceKey "NextRun" -Value $Command -Type String Start-Sleep 10 Restart-Computer
额外检查点
- 确保
systemrename.ps1确实存在于$env:USERPROFILE\Downloads目录下,路径拼写完全正确(注意大小写,Windows虽然不区分,但最好和实际路径一致)。 - 如果你的系统是64位的,且脚本依赖32位PowerShell环境,需要把PowerShell路径改成
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Powershell.exe。 - 执行这个配置脚本时,必须以管理员身份运行PowerShell,否则没有权限修改HKLM下的注册表项,所有设置都会失效。
内容的提问来源于stack exchange,提问作者Dan Shepard

