部分Microsoft Edge LGPO设置无法在非域环境下应用于所有用户
我正在编写PowerShell脚本,为未加入域的计算机通过注册表应用部分LGPO设置。大部分设置已成功应用,但以下几项除外:
- DefaultSearchProviderEnabled
- DefaultSearchProviderSearchURL
- DefaultSearchProviderName
- SmartScreenEnabled
- SmartScreenPuaEnabled
在普通用户会话中以管理员权限运行脚本后,上述设置仅对该用户生效,计算机上的其他所有用户(包括管理员)均未应用这些设置。
我查询到资料显示“此策略仅适用于已加入Microsoft Active Directory域的Windows实例”,但为何这些设置对运行脚本的用户生效了?是否可以在不加入域的情况下将其应用于所有用户?
为什么仅运行脚本的用户生效?
你在当前用户会话中执行脚本时,即使使用管理员权限,注册表操作默认仍指向当前用户的HKCU分支(HKCU\Software\Policies\Microsoft\Edge)。Edge会优先读取用户级的策略设置,因此该用户的Edge能识别到这些配置并生效。
网上提到的“仅适用于已加入AD域的实例”,指的是通过**组策略对象(GPO)**官方部署这些设置的场景——域环境下GPO可以自动批量推送策略到所有用户/机器,但手动修改注册表的方式不受域限制,只是需要自行处理多用户覆盖的问题。
未加域时如何应用到所有用户?
可以通过以下三个维度的注册表操作,实现全用户覆盖:
1. 写入机器级注册表分支(HKLM)
Edge支持部分策略通过机器级注册表(HKLM:\Software\Policies\Microsoft\Edge)生效,对所有用户(包括新创建的用户)强制生效。执行以下PowerShell命令:
# 创建HKLM下的Edge策略路径 New-Item -Path "HKLM:\Software\Policies\Microsoft\Edge" -Force # 配置搜索提供者相关设置 New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderSearchURL" -Value "https://your-search-provider.com?q={searchTerms}" -PropertyType String -Force New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderName" -Value "你的搜索提供者名称" -PropertyType String -Force # 配置SmartScreen相关设置 New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Edge" -Name "SmartScreenEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Edge" -Name "SmartScreenPuaEnabled" -Value 1 -PropertyType DWord -Force
执行后,用户需注销重新登录或重启Edge,机器级策略会覆盖用户级的冲突设置。
2. 批量修改现有用户的HKCU分支
机器级策略对已登录过的现有用户可能不生效(因为他们的HKCU已有相关配置),需要遍历所有本地用户的注册表文件(NTUSER.DAT)进行修改:
# 遍历C:\Users下的用户文件夹(排除系统默认文件夹) $userProfiles = Get-ChildItem "C:\Users" | Where-Object { $_.Name -notin @("Public", "Default", "Default User") } foreach ($profile in $userProfiles) { $ntuserPath = Join-Path $profile.FullName "NTUSER.DAT" if (Test-Path $ntuserPath) { try { # 加载用户注册表到临时项 reg load HKU\TempUser $ntuserPath # 创建Edge策略路径 New-Item -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Force -ErrorAction SilentlyContinue # 写入各项设置(同HKLM的属性配置) New-ItemProperty -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderSearchURL" -Value "https://your-search-provider.com?q={searchTerms}" -PropertyType String -Force New-ItemProperty -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderName" -Value "你的搜索提供者名称" -PropertyType String -Force New-ItemProperty -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Name "SmartScreenEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKU:\TempUser\Software\Policies\Microsoft\Edge" -Name "SmartScreenPuaEnabled" -Value 1 -PropertyType DWord -Force # 卸载临时注册表项 reg unload HKU\TempUser } catch { Write-Warning "无法修改用户 $($profile.Name) 的注册表:$($_.Exception.Message)" } } }
注意:需确保目标用户未处于登录状态,否则NTUSER.DAT会被系统锁定无法加载。
3. 配置默认用户(Default User)
修改默认用户的注册表(C:\Users\Default\NTUSER.DAT),确保新创建的用户自动继承这些策略:
try { reg load HKU\DefaultUser "C:\Users\Default\NTUSER.DAT" New-Item -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Force -ErrorAction SilentlyContinue # 写入各项设置(同HKLM的属性配置) New-ItemProperty -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderSearchURL" -Value "https://your-search-provider.com?q={searchTerms}" -PropertyType String -Force New-ItemProperty -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Name "DefaultSearchProviderName" -Value "你的搜索提供者名称" -PropertyType String -Force New-ItemProperty -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Name "SmartScreenEnabled" -Value 1 -PropertyType DWord -Force New-ItemProperty -Path "HKU:\DefaultUser\Software\Policies\Microsoft\Edge" -Name "SmartScreenPuaEnabled" -Value 1 -PropertyType DWord -Force reg unload HKU\DefaultUser } catch { Write-Warning "无法修改默认用户注册表:$($_.Exception.Message)" }
内容的提问来源于stack exchange,提问作者Alex

