在一个(且仅一个)域控制器上执行计划任务

在一个(且仅一个)域控制器上执行计划任务

我正在设置一个 Active Directory 域。它包括一些使用 sssd 访问域的用户和组的 Linux 服务器。

因为用户和组需要 UID 和 GID(我不想使用ldap_id_mappingsssd 选项),所以我准备了 powershell 脚本,在添加用户或组时运行。它们搜索分配的最高 UID(或 GID),并将下一个分配给新用户/组。

该脚本作为相应 EventID 的任务被触发(例如,用户创建的 EventID 为 4720)。

这一切似乎都运行得很好。但是,因为我至少有两个域控制器,并且希望即使其中一个出现故障也能提供此功能,所以我需要在两个域控制器上都添加任务。但这意味着我的脚本会运行两次,甚至可能同时运行。不过,我更希望不必编写一些锁定机制。

有没有办法确保任务仅在一个域控制器上运行?我在任务计划程序中找不到选项。

答案1

也许您可以在每个域控制器上运行该任务,而不是仅在一个域控制器上运行该任务,但请更改您的 Powershell 脚本,以便脚本本身仅针对域控制器——也许可以使 PowerShell 脚本始终以具有 PDCe FSMO 角色的域控制器为目标。

我不确定您在脚本中使用了哪些 cmdlet(如果有),但如果使用 ActiveDirectory 模块中的 Set-ADUser,您可以轻松地使用“-Server”参数定位该 cmdlet。

不过,我宁愿不编写一些锁定机制。

AD 是多主控的,它有一个冲突解决过程,当对同一对象进行写入时可以自动解决冲突。我相当肯定,您不必担心某些重复的属性更新会破坏 Active Directory。


在我看来,完成您要做的事情的最合理的方法就是自动化(编写脚本)用户创建过程,以便在创建用户时分配 UID/GID,而不是由安全日志中的事件触发。

相关内容