我最近不得不编写一个脚本来删除注释用户,并且缺少有关删除请求批准过程的文档。
在下面的答案中,您可以找到我的代码以及有关该过程及其一些怪癖的一些解释。
如果您可以改善我的答案,请随时这样做。
答案 0 :(得分:2)
因此,这里首先是文档link,涉及deleteUser
类的NotesAdministrationProcess
方法,我们将使用该方法删除用户。
看文档,这应该很简单,但是用法段落提到它会触发其他动作。现在,如果您不了解像我这样的笔记,您会认为这些动作将立即触发。就像DJT会说:错误!急!
deleteUser方法通过间隔执行的管理过程(除非将immediate
标志设置为true)删除用户。这些间隔是在Domino Admin Client中的
Configuration->Server->%SERVERDOC%>Server Tasks->Administration Process -> normal request interval
默认值为60分钟。
接下来要知道的是,删除邮件文件之类的某些操作将需要批准(我假设这也是可配置的,但这只是一个猜测)。
NotesAdministrationProcess
还具有不同的.Approve*
方法,包括ApproveMailFileDeletion
,该方法将noteID作为参数(Link to docs)。
如果您仔细阅读deleteUser
文档,您会注意到这些方法也会返回一个noteID。如果您尝试将此ID与ApproveMailFileDeletion
一起使用,则会出现以下错误:
Invalid Approval Request note.
如您所料,这是错误的ID。删除过程有多个步骤,每个步骤都有自己的ID,到目前为止,我还没有找到一种方法来使用deleteUser返回的ID来获取这些步骤。
这是删除代码:
#create session, this is documented pretty well
$user = "CN=Test User/O=NotesTest"
$server = "CN=WIN-SBPV9BSJEKJ/O=NotesTest"
$session = New-Object -ComObject Lotus.NotesSession
$session.initialize($sessionUserIdFilePassword)
$adminProcess = $session.CreateAdministrationProcess($server)
#delete user for parameters see docs
$noteID = $adminProcess.DeleteUser($user, $immediate, $mailfileAction, $denyGroup)
这就是我如何找到相关的批准请求(为简便起见,没有错误处理等)(如果您一次性完成所有这些操作,请添加一个睡眠计时器以使执行间隔通过):>
#get all pending requests
$db = $session.GetDatabase($server,"admin4.nsf",$false)
$appView = $db.GetView("Pending Administrator Approval")
$doc = $appView.GetFirstDocument()
#loop through requests to find request pertaining to current user and action, then approve
while($doc -ne $null){
$requestTargetAccountDN = $doc.Items.Get(4).Text #4= ProxyNameList, contains DN of account
$requestTargetDbPath = $doc.Items.Get(20) #20= ProxyDatabasePath contains mailpath (mail/shortname)
if($requestTargetAccountDN -eq $user){
if($doc.ColumnValues.Get(5) -eq "Approve Mail File Deletion"){
$adminProcess.ApproveMailFileDeletion($doc.NoteID)
}
}
$doc = $appView.GetNextDocument($doc)
}