Lotusscript删除用户并批准

时间:2018-08-21 13:06:10

标签: powershell lotus-notes lotus-domino lotusscript

我最近不得不编写一个脚本来删除注释用户,并且缺少有关删除请求批准过程的文档。

在下面的答案中,您可以找到我的代码以及有关该过程及其一些怪癖的一些解释。

如果您可以改善我的答案,请随时这样做。

1 个答案:

答案 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)
}