USMT LoadState脚本返回错误码71及ACL身份映射异常求助
USMT LoadState脚本错误排查与修复
问题概述
你编写的USMT用户状态恢复脚本在两台测试机(一台有预存配置文件、一台为全新安装)上运行时,出现两个关键错误:
- LoadState返回码71
- ACL添加时抛出
IdentityNotMappedException(身份引用无法转换)
错误1:LoadState返回码71
原因分析
USMT返回码71通常表示目标系统中无法找到指定用户的配置文件,或用户身份未被正确识别,常见诱因:
- 全新安装的机器上,目标用户从未登录过,未生成默认本地配置文件,LoadState无法定位恢复路径
/ui:$user参数使用了不完整的用户身份格式(仅用户名,未包含域/计算机名前缀)- 脚本中
$location = "USMT location"是占位符,未替换为实际USMT工具的安装路径
修复方案
确保用户身份存在且配置文件已生成
- 全新安装机器上,让目标用户先登录一次,自动生成默认配置文件;或提前用PowerShell创建用户:
# 本地用户示例 New-LocalUser -Name $user -Password (ConvertTo-SecureString "Password123!" -AsPlainText -Force) -FullName "Test User" - 域环境下确认用户已同步到目标机器
- 全新安装机器上,让目标用户先登录一次,自动生成默认配置文件;或提前用PowerShell创建用户:
修正LoadState参数
将/ui:$user改为完整身份格式,直接使用脚本中已定义的$ntuser(需确保ntuserlocation替换为实际域名/计算机名):&$loadstate $store /i:"$migApp" /i:"$migUser" /ue:*\* /ui:$ntuser /nocompress /c /r:3 /l:$log替换USMT路径占位符
将$location = "USMT location"改为实际路径,例如:$location = "C:\Program Files\USMT"
错误2:ACL身份映射异常
原因分析
报错出现在添加SYSTEM、ADMINISTRATORS权限的代码段,核心问题:
- 代码中使用了**中文双引号
”**而非英文双引号",导致字符串解析错误,系统无法识别身份标识 $ntuser = "ntuserlocation\" + $user中的ntuserlocation是占位符,未替换为实际域名/计算机名,导致用户身份在目标系统不存在- 完全移除所有ACL的操作可能导致后续权限不足,甚至无法修改ACL
修复方案
替换中文引号为英文引号
错误代码:$new = "SYSTEM”,"FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow" $new = "ADMINISTRATORS”,”FullControl”,”ContainerInherit,ObjectInherit”,”None”,”Allow"修正为:
$new = "SYSTEM","FullControl","ContainerInherit,ObjectInherit","None","Allow" $new = "ADMINISTRATORS","FullControl","ContainerInherit,ObjectInherit","None","Allow"验证用户身份有效性
将ntuserlocation替换为实际域名或计算机名,例如:# 域用户示例 $ntuser = "CORP\" + $user # 本地用户示例 $ntuser = "$env:COMPUTERNAME\" + $user增加身份存在性检查:
try { $null = New-Object System.Security.Principal.NTAccount($ntuser) } catch { Write-Host "错误:用户 $ntuser 在当前系统中不存在" Start-Sleep -Seconds 10 exit 1 }优化ACL操作逻辑
不要完全移除所有ACL,保留基础权限后再修改,避免权限丢失:# 禁用继承但保留现有规则(替代原有的移除所有ACL操作) $inheritanceAcl = Get-ACL -Path $root $inheritanceAcl.SetAccessRuleProtection($True, $False) # 第二个参数为False表示保留现有规则 Set-Acl -Path $root -AclObject $inheritanceAcl
脚本其他优化点
- 修复冗余注释:删除重复的
#Quick Access注释 - 修正Quick Access目标路径:
$quickAccessDestination = Join-Path "C:\Users\$user\AppData\Roaming\Microsoft\Windows\Recent" "AutomaticDestinations" Copy-Item -Path $quickAccessFile -Destination $quickAccessDestination -Force - 修正Photos文件夹创建的注释:将
#Create stickNotes folder改为#Create Photos folder
内容的提问来源于stack exchange,提问作者gareth jones
相关产品推荐
相关产品推荐

