使用LithnetRMA从MIM应用中批量移除离职用户的实现逻辑咨询
LithnetRMA移除MIM应用成员代码修正
原代码存在的问题
$userList被定义为纯文本字符串,未转换为结构化CSV对象,循环遍历的时候无法通过$item.ObjectID正常读取到用户ID,导致逻辑完全无法执行- 应用对象查询逻辑放在了循环内部,每次遍历用户都会重复查询同一个应用的资源,无意义增加MIM服务的请求开销
- 冗余的用户对象查询步骤,移除应用显式成员仅需要传入用户的ObjectID,不需要提前调用
Get-Resource获取用户资源 - 没有异常校验逻辑,遇到无效ID、用户不在当前应用成员列表内等场景时会抛出未捕获的错误,可能导致批量任务中断
修正后可正常运行的代码
# 加载Lithnet Service PowerShell模块 Import-Module LithnetRMA # 定义待移除的用户ID列表 $userList = @" ObjectID; 139b8058-052c-459d-b3c0-1600fo417d1a 195b8057-042c-439d-b2c0-1800fp117d1b 169b8047-022c-449d-b0c0-1900fi217d1c 162b8037-012c-489d-b1c0-1000fu417d1d 164b8027-002c-488d-b8c0-1300fy317d1e 163b8017-012c-449d-b7c0-1500fr517d1f "@ | ConvertFrom-Csv -Delimiter ';' # 提前一次性获取目标应用资源,避免循环内重复查询 $application = Get-Resource -ID "168b8077-052c-489d-b4c0-1700ff817d1f" # 批量移除用户 foreach($item in $userList) { $userId = $item.ObjectID.Trim() # 跳过空ID行 if([string]::IsNullOrWhiteSpace($userId)){ continue } # 校验用户是否在应用显式成员列表中,避免报错 if($application.ExplicitMember.Contains($userId)){ $application.ExplicitMember.Remove($userId) } } # 所有修改完成后统一保存一次即可,无需循环内重复保存 Save-Resource -Resources $application
优化说明
- 把应用资源查询、最终资源保存都移到循环外,仅需调用2次MIM服务接口,相比原代码每次循环都查询+保存的逻辑,性能提升明显
- 增加了空ID过滤、成员存在性校验逻辑,避免无效报错
- 如需单独处理每个ID的执行状态,可在循环内增加
try/catch捕获单条记录的异常,不影响整体批量任务执行
内容的提问来源于stack exchange,提问作者ak2595
相关产品推荐
相关产品推荐

