Windows 11通过PowerShell添加键盘后点击语言栏致任务栏冻结求助
解决登录脚本添加语言后语言栏卡住的问题
问题根源
登录脚本执行时机过早,此时Windows Shell相关组件(如Microsoft.Windows.ShellExperienceHost)尚未完成初始化,修改用户语言列表会导致组件激活失败,进而引发UI卡顿。手动运行或通过界面添加时,Shell组件已完全加载,因此不会出现问题。
可行解决方案
1. 延迟脚本执行
在登录脚本中添加延迟,等待Shell组件初始化完成后再执行语言添加操作:
# 等待10秒,可根据实际环境调整时长 Start-Sleep -Seconds 10 $LanguageList = Get-WinUserLanguageList # 添加判断避免重复执行,减少系统负担 if (-not ($LanguageList.LanguageTag -contains "ru-RU")) { $LanguageList.Add("ru-RU") Set-WinUserLanguageList $LanguageList -Force }
2. 使用RunOnce注册表项执行脚本
将脚本注册到用户的RunOnce注册表项,确保在Shell完全启动后仅执行一次:
- 编写包含语言添加逻辑的PowerShell脚本(如
Add-RussianLanguage.ps1),保存到域共享路径。 - 通过组策略或登录脚本添加注册表项:
$runOncePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce" Set-ItemProperty -Path $runOncePath -Name "AddRussianLanguage" -Value "powershell.exe -ExecutionPolicy Bypass -File \\domain-share\scripts\Add-RussianLanguage.ps1"
RunOnce中的命令会在用户登录完成、Shell加载完毕后自动执行,执行后会自动删除该注册表项。
3. 任务计划程序触发执行
创建任务计划,设置为用户登录后延迟触发:
- 触发器:用户登录后延迟5分钟(可按需调整)
- 操作:启动程序
powershell.exe,参数为-ExecutionPolicy Bypass -File "脚本完整路径" - 条件:按需勾选"只有在计算机使用交流电源时才启动此任务",取消"唤醒计算机运行此任务"
4. 修复已出现问题的用户
若用户已出现卡顿问题,可执行以下命令修复ShellExperienceHost组件:
Get-AppXPackage *ShellExperienceHost* | Foreach-Object {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
事件查看器报错信息:
"Activation for Microsoft.Windows.ShellExperienceHost_cw5n1h2txyewy!App failed. Error code: Class not registered. Activation phase: No phase defined"
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

