我在一家小型组织工作,该组织使用带有 Active Directory 域的单个文件和打印服务器进行用户管理。
负责新员工入职的办公室管理员不是技术人员,通常会创建 AD 用户帐户,因为现场没有永久的 IT 支持,而用户需要立即使用他们的帐户。但是,之后还需要完成后续工作(在 PBX 上创建分机、设置语音邮件、填写表格等),这些工作需要外包给不同的人。
我们采用的手动流程大部分情况下都有效,但存在漏洞,有时会被遗忘。我无法重新构建这些业务流程,因此,就这个问题而言,我们能否将其视为业务流程是不可变的。我的解决方案需要与现有流程相融合。
本质上,我认为我需要的是一种在 Active Directory 中手动创建新用户时生成电子邮件通知的方法 - 一种轻量级工作流引擎,它只向人员和/或我的票务系统发送电子邮件,告知需要执行的后续任务。是的,我知道这不是最佳实践,是的,我知道这并不酷,但考虑到我的情况,我认为这是最务实的解决方案。
有没有一种简单、轻量级的方法来做到这一点?我正在考虑使用 PowerShell 脚本或类似的东西(没有预算购买合适的 IDM 系统,而且正如我提到的,业务流程是不可变的)。
答案1
为使用 Powershell 发送电子邮件提供一些帮助。我以前都是System.Net.Mail.SmtpClient
从 powershell 发送的。
$Mail = New-Object System.Net.Mail.MailMessage($Sender,$Recipient)
$Mail.IsBodyHTML = $True
## Setup SMTP Mail Server info
$MailClient = New-Object System.Net.Mail.SmtpClient
$MailClient.Host = $Mailserver
$Mail.Subject = "Subject"
$Mail.Body = "blah blah blah"
# Send the message
$MailClient.Send($Mail)
}
您需要指定 $Sender、$recipient 和 $mailserver。
答案2
所以这更多的是一个流程问题,而不是技术问题。在我看来,你没有某种票务系统。我强烈建议你建立一个票务系统,因为它也会对其他领域有所帮助。好的系统会让你设置一个工作流程,让你在作品完成后将票“推送”给下一个排队的人。
更糟糕的情况是,您可以通过推送票证并让“所有者”将其推回并转移给下一个人来手动创建流程。
直接回答你的问题,是的,你可以创建一个 Powershell 脚本来创建一个 AD 用户,然后你就可以发送邮件 - 在 Powershell v2 中还不需要这样做,但在 V1 中你必须深入研究 .Net 对象来发送邮件,但这并不难(get-object 是你的朋友)
答案3
根据迄今为止发生的讨论和您的评论,我建议每小时运行一次计划任务来捕获任何新用户,并在最后一小时内发送包含任何新用户的电子邮件。
如果您将电子邮件格式化得很好,包括工作流程中的所有步骤,那么第一个收到它的人可以对他们的任务发表评论(或删除文本),然后转发电子邮件。
虽然对于立即传达新员工的信息并不有效,但它可以:
- 简单的
- 适合小型企业的有效沟通
- 资源非常匮乏
以下是您可以用来查找过去一小时内创建的用户的名称的 PowerShell:
$date = [datetime]::UtcNow.addhours(-1)
$lasthour = "{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}.0Z" -f $date.year,$date.month,$date.day,$date.hour,$date.minute,$date.second
$strFilter = "(&(objectCategory=User)(whenCreated>=$lasthour))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
{$objItem = $objResult.Properties; $objItem.name}
或者,您可以在 powershell 中编写一些内容,以便根据员工输入创建用户,然后在该过程结束时继续发送电子邮件。
总的来说,如果您已经建立了票务系统,我建议您将其作为最佳选择,因为它可以用于详细跟踪。我上面输入的内容实际上只是一张非正式的票,有很大的出错空间。
答案4
您真正想要的是一个新的 AD 管理员。虽然从技术上讲可以创建一个脚本来轮询 AD 更改、查找新用户对象并向您发送列表,但验证新用户是否需要完成工作流程中的下一步(您有一封新电子邮件)所涉及的工作量(由于错误而重新创建的帐户怎么办?)不仅仅是让管理员遵循您概述的流程。管理员应该要求一种自动化发送电子邮件的方法,而不是您寻找一种方法来查看他是否已经这样做了。您需要先解决流程问题,然后才能考虑自动化它们