LotusScript批量删除Domino目录用户脚本失效及即时删除方案咨询
现有脚本不生效的原因
- 核心问题:
NotesAdministrationProcess对象未初始化
你仅声明了Dim nap As NotesAdministrationProcess,但没有执行实例化操作Set nap = session.CreateAdministrationProcess("你的Domino服务器名称"),空对象调用方法自然没有实际效果,加上你加了On Error Resume Next吞掉了所有报错,所以不会提示执行失败,你会误以为删除请求已经提交成功。 - 语法错误
日志打印行语法错误,缺少字符串连接符:原代码Print "Deleted " & CStr(delcounter) " Users"应该改为Print "Deleted " & CStr(delcounter) & " Users" - AdminP机制特性
DeleteUser方法的第二个参数设为True仅代表AdminP会优先处理该请求,不是直接删除用户文档,仍然需要等待AdminP进程轮询执行,此外运行脚本的账号必须拥有 Domino 目录的[UserModifier]及以上管理员权限,才能提交生效的AdminP删除请求。 - 用户名匹配问题
CSV中存储的用户名必须和names.nsf中Person文档的全名格式完全匹配,需要包含完整的层级结构(如张三/研发部/XX公司),仅写简称会找不到对应用户。
无需触发AdminP即时删除用户的实现方案
直接操作Domino目录(names.nsf)的Person文档即可实现即时删除,不需要等待AdminP进程处理,注意运行脚本的账号需要拥有names.nsf的文档删除权限:
Sub Initialize Dim session As New NotesSession Dim addbk As NotesDatabase Dim usrvw As NotesView Dim userdoc As NotesDocument Dim Username As String Dim delcounter As Integer Dim FIleNumber As Integer Dim Filename As String ' 打开Domino目录 Set addbk=session.GetDatabase("你的服务器名","names.nsf",False) ' 用按全名排序的视图,确保能匹配CSV里的用户名格式 Set usrvw=addbk.getview("$NamesFieldLookup") usrvw.Autoupdate = False ' 读取CSV文件 filenumber%=FreeFile() fileName$="D:\usrdel.csv" ' 替换为你的CSV路径 Open fileName For Input As fileNumber% delcounter=0 Do Until EOF(fileNumber%) Input #fileNumber%,Username Username = Trim(Username) ' 查找对应用户文档 Set userdoc = usrvw.Getdocumentbykey(Username, True) If Not userdoc Is Nothing Then ' 直接永久删除文档 Call userdoc.RemovePermanently(True) delcounter=delcounter+1 Print "已删除用户:" & Username & ",累计删除" & CStr(delcounter) & "个用户" Else Print "未找到用户:" & Username End If Loop Close fileNumber% Print "批量删除完成,共删除" & CStr(delcounter) & "个用户" End Sub
注意:该方案仅删除Domino目录中的用户文档,不会自动删除用户邮件文件、不会自动将用户加入拒绝访问组、也不会移除各群组中的该用户引用,如果需要处理这些关联逻辑,可以在删除文档前自行扩展对应代码。
内容的提问来源于stack exchange,提问作者S1ngler
相关产品推荐
相关产品推荐

