AD 域批量删除域账户对象:Remove-ADObject -Identity -Recursive

需求

如果删除单个账户,我们可以使用 Remove-ADUser -Identity test_del_myaccount -Confirm:$false 命令执行,一般正常情况下可以成功执行,但是会有以下两种常见问题:

一、如果要同时删除 10 个或 100 个甚至更多账户,就不能一个一个执行;

二、如果账户还包含子树目录的场景下执行 Remove-ADUser 就会报错 “Remove-ADUser : 目录服务只可以在一个页状对象上运行要求的操作。”;

Remove-ADUser : 目录服务只可以在一个页状对象上运行要求的操作。
所在位置 行:5 字符: 1
+ Remove-ADUser -Identity    test_del_myaccount    -Confirm:$false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (test_del_myaccount:ADUser) [Remove-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8213,Microsoft.ActiveDirectory.Management.Commands.RemoveADUser

经过查询微软 PowerShell 文档,如果要删除子项(子树)需要使用 Remove-ADObject -Identity test_del_myaccount -Recursive 命令。

完整命令

import-csv D:\DesktopNow\del.csv | foreach{Get-ADUser -Identity $_.name} | foreach{Remove-ADObject -Identity $_.ObjectGUID -Recursive -Confirm:$False}

以上即是通过导入计划删除域账户的明细 csv 表格数据,经过两个循环执行命令来删除用户:

代码段一:import-csv D:\DesktopNow\del.csv

1. 指定导入 csv 表格的路径和文件名 import-csv .\del.csv;
2.csv 表格格式;

3.csv 表格导入到 PowerShell;

代码段二:foreach{Get-ADUser -Identity $_.name}

1. 循环获取域账户信息;

2.-Identity $_.name 中的 name 需要与上述 csv 的表头对应;

代码段三:foreach{Remove-ADObject -Identity $_.ObjectGUID -Recursive -Confirm:$False}

1. Remove-ADObject 删除对象命令,可以是账户、计算机、组织等;

2. -Identity $_.ObjectGUID 指定以对象的 GUID 来查询账户并删除,根据微软 PowerShell 文档 Remove-ADObject 命令的运用规则,其中 ObjectGUID 也可以替换为 DN(CN=AmyAl-LPTOP,CN=Computers,DC=FABRIKAM,DC=COM)名称 来使用,

3. -Recursive 循环删除账户及子项,即解决使用 Remove-ADUser 报错【Remove-ADUser : 目录服务只可以在一个页状对象上运行要求的操作。】;

4. -Confirm:$False 不需要确认,直接执行。

理解更多

如果需求是只要删除一个用户,但是用户还有子项/子集/子树,使用 Remove-ADUser 还是不能直接删除,根据以上的实例,我们可以使用以上完整代码中的后两个部分即可,即使用 Get-ADUser 来获取用户信息,再使用 Remove-ADObject 获取用户 ObjectGUID 定位精确用户以删除。

Get-ADUser -Identity test_del_user | foreach{Remove-ADObject -Identity $_.ObjectGUID -Recursive -Confirm:$False}

0 条评论

昵称

沙发空缺中,还不快抢~