迁移至OneDrive Redirect后,用PowerShell修改MRU二进制文件路径
用PowerShell修改资源管理器MRU列表的二进制路径(Folder Redirection → OneDrive Redirect迁移场景)
资源管理器RecentDocs注册表项中存储的MRU路径采用**UTF-16LE(Unicode)**编码的二进制格式,每个路径以空字符(\0)分隔。PowerShell完全支持将其转换为可读字符串、修改后再转回二进制,具体步骤如下:
1. 读取注册表中的二进制MRU数据
定位到目标注册表路径,读取对应二进制值(默认值为*,针对特定文件类型的MRU可替换为扩展名,如.docx):
# 目标注册表路径 $mruRegPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs" # 读取默认MRU二进制数据(如果是特定文件类型,将'*'改为对应扩展名,比如'docx') $binaryMruData = (Get-ItemProperty -Path $mruRegPath).'*'
2. 将二进制数据转换为可读路径列表
通过UTF-16LE编码解析二进制数据,再按空字符分割得到独立的路径:
# 解析二进制为字符串,分割成单个路径并过滤空条目 $mruPaths = [System.Text.Encoding]::Unicode.GetString($binaryMruData) -split "`0" | Where-Object { $_ -ne "" }
3. 替换旧路径前缀为OneDrive新路径
根据迁移场景,把Folder Redirection的旧路径前缀替换为OneDrive Redirect的新前缀(用[regex]::Escape处理路径中的特殊字符,避免正则匹配出错):
# 定义旧路径前缀和新路径前缀 $oldFolderRedirectPath = "\\your-old-server\user-profiles\$env:USERNAME\Documents" $newOneDrivePath = "$env:USERPROFILE\OneDrive - YourCompanyName\Documents" # 批量替换路径 $updatedPaths = $mruPaths | ForEach-Object { $_ -replace [regex]::Escape($oldFolderRedirectPath), $newOneDrivePath }
可选:如果想过滤掉已失效的旧路径,可在替换前添加Where-Object { Test-Path $_ }。
4. 将修改后的路径转回二进制格式
把更新后的路径用空字符连接,再转换回UTF-16LE二进制(末尾需额外添加一个空字符保持原始格式):
$updatedBinaryData = [System.Text.Encoding]::Unicode.GetBytes(($updatedPaths -join "`0") + "`0")
5. 写回注册表并重启资源管理器
将修改后的二进制数据写回注册表,重启资源管理器使更改生效:
# 写回注册表(同样,若为特定文件类型,将'*'改为对应扩展名) Set-ItemProperty -Path $mruRegPath -Name '*' -Value $updatedBinaryData # 重启资源管理器 Stop-Process -Name explorer -Force Start-Process explorer
注意事项
- 操作前建议备份注册表分支:
Export-ItemProperty -Path $mruRegPath -LiteralPath "C:\temp\RecentDocs_Backup.reg" - 若用户的OneDrive路径包含特殊字符(如空格、连字符),确保变量定义正确
- 部分旧MRU条目可能指向已删除的文件,可根据需求决定是否保留
内容的提问来源于stack exchange,提问作者Joe Stellato
相关产品推荐
相关产品推荐

