从所有通讯组中删除所有前雇员

2024-05-07

因此,今天我被分配的任务是从所有 DL 中删除域中的所有前员工(他们在 AD 中拥有自己的文件夹)。有没有什么方法可以快速做到这一点,或者至少比单独检查每个并转到 > 的成员删除所有更快?

Thanks

编辑以添加更多信息:

有 822 个用户需要更新“成员”选项卡,以将他们从所有通讯组列表中删除。在我们已经巨大的工作量之上,这将花费我的 5 人团队(服务台)大约一周的时间来进行筛选。所有前雇员的文件夹的大致路径是:

公司名称.local\我的公司\Users\Ex-Employees\

如果需要任何其他信息,我将非常乐意提供。

编辑 2:系统中有超过 250 个 DL,因此出于保密和功能原因,我无法提供列表。


添加脚本如果你想使用 Powershell 脚本,这里是代码

Add-Type -AssemblyName System.DirectoryServices.AccountManagement

$directorySearcher = New-Object System.DirectoryServices.DirectorySearcher
$directorySearcher.SearchRoot = "LDAP://OU=YourOU,DC=YourDomain,DC=com"
$directorySearcher.PageSize = 1000
$directorySearcher.Filter = "(&(objectCategory=User))"
$directorySearcher.SearchScope = "Subtree"

$directorySearcher.PropertiesToLoad.Add("name")

$searchResults = $directorySearcher.FindAll()

foreach ($result in $searchResults)
{$objItem = $result.Properties
    "Name: " + $objItem.name

    $contextType = [System.DirectoryServices.AccountManagement.ContextType]::Domain
    $userPrincipal = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($contextType,$objItem.name)
    $userGroups = $userPrincipal.GetGroups()

    foreach($userGroup in $userGroups){
      if ($userGroup.IsSecurityGroup -eq 0) #Distribution Group Only
      {
        "Removing - " + $userGroup.SamAccountName
        $userGroup.Members.Remove($userPrincipal)
        $userGroup.Save()
      }
    }
}

对于.Net,这里是代码

using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

namespace RemoveFromDistributionGroups
{
    class Program
    {
        private static string sDomain;
        private static string sDefaultOU;
        private static string sServiceUser;
        private static string sServicePassword;

        static void Main(string[] args)
        {
            try
            {
                Console.Write("Type your Domain (i.e: yourcompany.com) ");
                sDomain = Console.ReadLine();

                Console.Write("Type the OU you want to use: (i.e: OU=yourou,DC=yourcompany,DC=com)");
                sDefaultOU = Console.ReadLine();

                Console.Write(@"Username: (i.e.: YOURDOMAIN\Raymund )");
                sServiceUser = Console.ReadLine();

                Console.Write("Password: ");
                sServicePassword = Console.ReadLine();


                foreach (UserPrincipal user in GetAllUsers())
                {
                    Console.WriteLine("Processing User : " + user.Name);
                    foreach (GroupPrincipal group in GetUserGroups(user))
                    {
                        if (group.IsSecurityGroup == false) //Distribution Group
                        {
                            group.Members.Remove(user);
                            group.Save();
                        }
                    }
                }

                Console.WriteLine("Done! Press a key to exit");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error Encountered : " + ex.Message);
                Console.WriteLine("Press a key to exit");
                Console.ReadLine();
            }
        }
        public static PrincipalContext GetPrincipalContext(string sOU)
        {
            PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sOU, ContextOptions.Negotiate, sServiceUser, sServicePassword);
            return oPrincipalContext;
        }
        public static ArrayList GetAllUsers()
        {
            ArrayList myItems = new ArrayList();
            PrincipalSearcher oPrincipalSearcher = new PrincipalSearcher();


            UserPrincipal oUserPrincipal = new UserPrincipal(GetPrincipalContext(sDefaultOU));

            oUserPrincipal.SamAccountName = "*";
            oUserPrincipal.Enabled = true;

            oPrincipalSearcher.QueryFilter = oUserPrincipal;
            ((DirectorySearcher)oPrincipalSearcher.GetUnderlyingSearcher()).PageSize = 5000;

            PrincipalSearchResult<Principal> oPrincipalSearchResults = oPrincipalSearcher.FindAll();
            foreach (Principal oResult in oPrincipalSearchResults)
            {
                myItems.Add(oResult);
            }

            return myItems;
        }
        public static ArrayList GetUserGroups(UserPrincipal oUserPrincipal)
        {
            ArrayList myItems = new ArrayList();

            PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetGroups();

            foreach (Principal oResult in oPrincipalSearchResult)
            {
                myItems.Add(oResult);
            }
            return myItems;

        }

    }
}

另请注意,在$directorySearcher.SearchRoot or sDefaultOU你需要使用你的前雇员所在的OU(或你所说的文件夹),我认为在你的情况下是"LDAP://OU=Ex-Employees,OU=Users,OU=MyBusiness,DC=BusinessName,DC=local"如果在 Powershell 中使用或"OU=Ex-Employees,OU=Users,OU=MyBusiness,DC=BusinessName,DC=local"如果在 .Net 代码中使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从所有通讯组中删除所有前雇员 的相关文章

  • 限制 LDAP 查询中返回的属性

    如何限制通过 System DirectoryServices 在 LDAP 查询中返回的属性 我一直在使用 DirectorySearcher 并将我想要的属性添加到 DirectorySearcher PropertiesToLoad
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • Convertfrom-string 删除前导零

    我在使用 Convertfrom String cmdlet 时遇到问题 value something 009 value ConvertFrom String Delimiter Output P1 P2 something 9 我想要
  • Powershell 在导入 csv 时出现 Set-ACL 问题

    我使用一个脚本将 ACL 从一个系统导入到 csv 中 并使用另一个脚本读取 csv 创建文件夹结构并将权限应用到新系统 由于安全限制 系统不可能相互连接 因此不能选择 robocopy 正在创建新的文件夹结构 但 ACL 未应用 并且出现
  • 我可以在没有扩展名的文件中包含 powershell 脚本吗?

    通常powershell脚本文件以 ps1结尾 模块以 psm1结尾 可以在没有扩展名的文件中包含 powershell 脚本 模块吗 只是 构建 或 启动 等等 这会在任何特定环境中导致问题吗 如果是 可以在具有其他 texty 扩展名
  • 如何使 PowerShell 函数调用超时

    我编写了一个小 powershell 函数 用于对远程服务器执行 Get EventLog 在某些服务器上 这似乎只是挂起并且永远不会超时 我可以使 powershell 函数调用超时吗 我知道如何针对不同的过程 https stackov
  • 查找所有 DHCP 和 DNS 服务器

    我有一位客户要求我找到他所有的 Dhcp 和 DNS 服务器以及一些附加信息 例如 DC 服务器和操作系统 所以我决定尝试提高我的 powershell 技能 但我对此还很陌生 所以我写了这个脚本 但我想仍然缺少一些东西 因为它不起作用 编
  • 从 CSV 中去除额外的文本限定符

    我有一个 CSV 其中某些字段由 符号分隔作为文本限定符 参见下面的例子 请注意 每个整数 例如 1 2 3 等 都应该是一个字符串 合格的字符串被 符号包围 1 2 3 qualifiedString1 4 5 6 7 8 9 10 11
  • 使用powershell获取快捷方式(.lnk)文件的目标

    我有一堆 lnk 文件 需要根据快捷方式指向的目标对它们进行不同的处理 我发现很少有关于如何使用其他语言执行此操作的信息 但没有找到有关使用 powershell 执行此操作的信息 我试过这个 sh New Object COM WScri
  • powershell,如何获取仅给定父进程ID的子进程ID

    假设我像这样启动一个 powershell 进程 procid start process FilePath powershell ArgumentList ping t localhost 仅给出 powershell 的进程 ID 如何
  • 如何在 Powershell 中设置低 I/O(“后台”)优先级

    There s 这个powershell脚本 https stackoverflow com a 4302 1266650它可以将进程的优先级从 空闲 设置为 实时 但某些工具提供另一个优先级 该优先级甚至会降低进程的优先级 如何在 Pow
  • Powershell删除文件夹-force

    我似乎无法删除文件 文件夹 除非我必须为所有文件 文件夹输入 A 我缺少什么 Get Childitem C Users AppData Local Temp ErrorAction SilentlyContinue Where Creat
  • 使用 objectGUID 进行查询 - Spring LDAP 模板

    我正在尝试获取 存储并依次使用 objectGUID 来查询 Active Directory 为了获取用户属性我正在使用以下 public static class MyDnKeyValueAttMapper implements Att
  • PowerShell 中的 SVN 输出编码

    我正在尝试在 PowerShell 脚本内的字符串中捕获 SVN 日志 在命令行上 输出的编码是正确的 但是当我将其捕获到字符串中时 它就不是正确的 PS C sandbox gt svn log r1804 https myserver
  • 根据 AD 组成员身份限制对 WPF 视图的访问

    我们有一个 WPF 应用程序 我们希望根据用户的 AD 组成员身份限制对应用程序的访问 我们可以将其作为每个视图的属性 或者作为用户启动应用程序时的检查吗 任何代码示例将不胜感激 在 NET 3 5 及更高版本上执行此操作的最简单方法是使用
  • Invoke-WebRequest SSL 失败?

    当我尝试使用时Invoke WebRequest我收到一些奇怪的错误 Invoke WebRequest Uri https idp safenames com Invoke WebRequest The underlying connec
  • 在 PowerShell 中,如何组合具有一对一关系的两个命令的结果?

    此特定示例是 Get User 和 Get Mailbox Exchange 2010 Get User 返回一些我需要的列 Get Mailbox 返回一些其他列 我很难弄清楚如何将两者的结果合并到一个表中 并包含两者的结果 Get Us
  • cURL 命令在 git bash 中有效,但在 cmd 和 powershell 中无效

    以下命令在 git bash 中有效 但在 cmd 和 powershell 中无效 curl X POST http localhost 5678 api findgen H Content Type application json d
  • 隐藏powershell输出

    我有以下脚本 param 参数 强制 true 字符串 dest New Item force path dest 1 itemtype directory New Item force path dest 2 itemtype direc
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查

随机推荐

  • mysql_upgrade 失败 - innodb 表不存在?

    我正在将 mysql 5 5 docker 容器数据库升级到 mysql 5 6 docker 容器 我能够解决所有其他问题 最后我的服务器运行的是 5 6 但是当我运行 mysql upgrade 时出现以下错误 ERROR root 1
  • Scala 和 Spark:Windows 上的 Dataframe.write._

    有人设法使用 Spark 写入文件 尤其是 CSV 吗 数据框 http spark apache org docs latest api scala index html org apache spark sql Dataset在 Win
  • java.library.path 中没有 ocijdbc12

    我正在尝试使用 OCI 驱动程序通过 java 程序连接到 oracle 以下是配置 Windows 7 32 位 JDK 1 7 Oracle 客户端 11g R2 ojdbc7 jar在我的独立应用程序的类路径中 但我收到以下异常 Ex
  • AngularJS:在任何部分页面控制器之前调用特定函数

    我想调用一个特定的函数 GetSession 在我的应用程序加载开始时 这个函数使 http调用并获取会话令牌 GlobalSessionToken从服务器 然后 该会话令牌用于其他控制器逻辑并从服务器获取数据 我已经打电话给这个GetSe
  • 无法在 Google Cloud Function 中加载 node_modules(index.js,不在项目根目录上)

    因此 我需要部署 Google Cloud Function 以在 PostgreSQL 数据库 Cloud SQL 上发出选择请求 我需要使用 pg 模块 然后使用以下命令安装它 npm i pg 你需要知道我的项目目录是这样的 proj
  • 添加到 std::vector 的中间

    有没有办法将值添加到 a 的中间vector在 C 中 假设我有 vector
  • 在react中自定义useAxios钩子

    我正在使用 axios 和 React 所以我想为此编写一个自定义钩子 我这样做了 它工作正常 如下所示 const useAxios gt const response setResponse useState const error s
  • 弹性图表隐藏数据提示

    我们从多个源获取数据 并且某个日期的数据可能存在也可能不存在 因此 对于没有数据的点 我们发送 NaN 问题 在下面的代码中 有没有办法不显示那些为空的数据提示 我添加了一个数据提示功能 但它确实显示了一个小的空方块 是否有可能甚至不显示
  • VSCode 扩展的安全性和隐私性

    我发现 VSCode 有很多不错的扩展 然而 我担心这些扩展是否将我的代码发送到他们的任何服务器 有什么办法可以查到吗 我可以使用 fiddler 并隔离插件中可能发生的调用 但不想对我安装的每个扩展都这样做 VScode 团队对此有一些指
  • VS2015 nuget包管理器找不到包

    我安装了 VS2015 Update 2 现在 nuget 包管理器找不到 Microsoft 和 net 包源之外的任何包 看起来 nuget 包源已被删除 当我将其添加回 http www nuget org http www nuge
  • 外部“C”声明如何工作?

    我正在学习编程语言课程 我们正在讨论extern C 宣言 除了 它与 C 和 C 接口 之外 此声明如何在更深层次上工作 这对程序中发生的绑定有何影响 extern C 用于确保后面的符号不是mangled http en wikiped
  • 如何测量异步发电机所花费的时间?

    我想测量生成器花费的时间 阻塞主循环的时间 假设我有以下两个生成器 async def run for i in range 5 await asyncio sleep 0 2 yield i return async def walk f
  • 预注册 ATL 窗口类

    我在一个项目中使用了 ATL 和 WTL 的组合 并从中派生了我自己的类CWindowImpl 看起来像这样 class CMyControl public CWindowImpl
  • 浮点型、双精度型和十进制最大值与大小的关系[重复]

    这个问题在这里已经有答案了 我在 C 中遇到了这些数据类型的大小和最大值的令人困惑的模式 在使用 Marshal SizeOf 比较这些大小时 我发现了以下结果 Float 4 bytes Double 8 bytes Decimal 16
  • Symfony2 -> Twig -> 表单 -> 字段 -> 设置渲染 = true

    我有一个简单的问题 我有一个带有字段的表单 例如 builder gt add x gt add y gt add z 在我的树枝文件中 我使用了多个块 并且我想停止渲染字段 我查看了 b html twig 文件 a html twig
  • LibGDX dispose() 方法应该如何使用?

    我很不清楚如何dispose LibGDX 框架中的方法有效并且应该使用 据我所知 当你不需要某种资源后 你必须进行处置以确保你的程序运行最佳 我正在开发一个移动应用程序 并且我有一个AssetManager在启动时在特殊指定的加载屏幕中加
  • 消息:Hive 架构版本 1.2.0 与 Metastore 的架构版本 2.1.0 不匹配 Metastore 未升级或损坏

    环境 spark2 11 hive2 2 hadoop2 8 2 hive shell 运行成功 并且没有错误或警告 但是当运行application sh时 启动失败 usr local spark bin spark submit cl
  • Android 中如何获取帧

    实际上 我需要从视频中获取所有帧 但在使用 Mediametadataretriever 缩略图 时间戳获取帧时 我经常重复获取第一帧 然后获取特定时间帧 我通过更改所有 GetFrameAtTime options 尝试了很多修复 但仍然
  • 如何避免javascript中for循环内的for循环

    我已经编写了一段运行良好的代码 我想要一个新数组 其中包含 myArr 中的元素 按照 orderArr 中指定的顺序 但是 它在另一个 for 循环中使用 for 循环来匹配数组元素 var myArr a b c d e var ord
  • 从所有通讯组中删除所有前雇员

    因此 今天我被分配的任务是从所有 DL 中删除域中的所有前员工 他们在 AD 中拥有自己的文件夹 有没有什么方法可以快速做到这一点 或者至少比单独检查每个并转到 gt 的成员删除所有更快 Thanks 编辑以添加更多信息 有 822 个用户