You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

USMT LoadState脚本返回错误码71及ACL身份映射异常求助

USMT LoadState脚本错误排查与修复

问题概述

你编写的USMT用户状态恢复脚本在两台测试机(一台有预存配置文件、一台为全新安装)上运行时,出现两个关键错误:

  1. LoadState返回码71
  2. ACL添加时抛出IdentityNotMappedException(身份引用无法转换)

错误1:LoadState返回码71

原因分析

USMT返回码71通常表示目标系统中无法找到指定用户的配置文件,或用户身份未被正确识别,常见诱因:

  • 全新安装的机器上,目标用户从未登录过,未生成默认本地配置文件,LoadState无法定位恢复路径
  • /ui:$user参数使用了不完整的用户身份格式(仅用户名,未包含域/计算机名前缀)
  • 脚本中$location = "USMT location"是占位符,未替换为实际USMT工具的安装路径

修复方案

  1. 确保用户身份存在且配置文件已生成

    • 全新安装机器上,让目标用户先登录一次,自动生成默认配置文件;或提前用PowerShell创建用户:
      # 本地用户示例
      New-LocalUser -Name $user -Password (ConvertTo-SecureString "Password123!" -AsPlainText -Force) -FullName "Test User"
      
    • 域环境下确认用户已同步到目标机器
  2. 修正LoadState参数
    将/ui:$user改为完整身份格式,直接使用脚本中已定义的$ntuser(需确保ntuserlocation替换为实际域名/计算机名):

    &$loadstate $store /i:"$migApp" /i:"$migUser" /ue:*\* /ui:$ntuser /nocompress /c /r:3 /l:$log
    
  3. 替换USMT路径占位符
    将$location = "USMT location"改为实际路径,例如:

    $location = "C:\Program Files\USMT"
    

错误2:ACL身份映射异常

原因分析

报错出现在添加SYSTEM、ADMINISTRATORS权限的代码段,核心问题:

  • 代码中使用了**中文双引号”**而非英文双引号",导致字符串解析错误,系统无法识别身份标识
  • $ntuser = "ntuserlocation\" + $user中的ntuserlocation是占位符,未替换为实际域名/计算机名,导致用户身份在目标系统不存在
  • 完全移除所有ACL的操作可能导致后续权限不足,甚至无法修改ACL

修复方案

  1. 替换中文引号为英文引号
    错误代码:

    $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"
    
  2. 验证用户身份有效性
    将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
    }
    
  3. 优化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:43:10