【问题标题】:Remove-AdObject with Import-CSV error带有 Import-CSV 错误的 Remove-AdObject
【发布时间】:2017-12-02 00:27:12
【问题描述】:

我在 Powershell 上很年轻,如果这很简单,我深表歉意。我尝试使用来自用户Nick 的示例脚本,但遇到了我认为 AdObject 应该出现的错误。我的脚本

Import-Module ActiveDirectory

$list = Import-CSV C:\scripts\deletebulkusers.csv

forEach ($item in $list) {
    $samAccountName = $item.samAccountName

    #Get DistinguishedName from SamAccountName
    $DN = Get-ADuser -Identity $Samaccountname -Properties DistinguishedName |
        Select-Object -ExpandProperty DistinguishedName

    #Remove object using DN
    Remove-ADObject -Identity $DN
}

我在下面发布了我的错误:

Remove-ADObject : The directory service can perform the requested operation only on a leaf object
At line:13 char:5
+     Remove-ADObject -Identity $DN -confirm:$false
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=<user>,DC=com:ADObject) [Remove-ADObject], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8213,Microsoft.ActiveDirectory.Management.Commands.RemoveADObject

【问题讨论】:

  • -confirm:$false 看起来语法错误。 -confirm $false 看起来更好。如果你完全去掉这个参数,它工作正常吗?
  • 如果我完全删除它,我仍然有同样的错误。

标签: powershell active-directory user-management


【解决方案1】:

这是我的最终脚本的样子。 NickMark Wragg 的答案都解决了我的问题。谢谢大家!!

 Import-Module ActiveDirectory

$list = Import-CSV C:\scripts\deletebulkusers.csv

forEach ($item in $list) {
    $samAccountName = $item.samAccountName

    $DN = Get-ADuser -Identity $Samaccountname | Remove-ADObject -Recursive 
}

【讨论】:

    【解决方案2】:

    很高兴我能帮上忙 :) 我以前也遇到过这种情况,特别是如果用户的手机上有 Outlook,它会将它们变成一个容器。如果您打开 Active Directory 用户和计算机,选择“查看”,然后选中“将用户、联系人、组和计算机作为容器查看”选项,然后导航到对象,您将看到其中有项目。

    -recurse 参数与Remove-ADObject 一起使用是为我解决的问题。

    【讨论】:

    • 是否存在使邮箱成为孤立且难以删除的风险?
    • 根据我的经验,虽然我不能肯定地说。在过去的两年里,我每天都在运行一个带有这个参数的脚本,没有任何不良影响,但是我想这可能会因环境而异......它只是在我的环境中递归删除 ExchangeActiveSync 设备。
    • -Recursive cmdlet 以及脚本的@Mark-Wragg 简化解决了我的问题。非常感谢你们两个!!
    • 另外,使用 -Recursive 行,它标记了要删除的电子邮件帐户。完美!
    【解决方案3】:

    该错误表明您要删除的对象是一个容器。我怀疑您可能会证明 cmdlet 是您要删除的对象的容器,而不是对象本身。

    我认为您可以通过使用管道来简化情况:

    Get-ADuser -Identity $Samaccountname | Remove-ADObject -WhatIf
    

    如果 -WhatIf 参数看起来符合您的预期,请删除它。

    【讨论】:

    • 我试过这个,但是我得到了同样的错误。我只是想删除一批用户,他们都有电子邮件帐户,我假设这就是问题所在。该脚本将删除没有电子邮件的用户,但不会删除有电子邮件的用户。
    • 看来您需要先禁用他们的邮箱。如果您使用的是 Exchange 2016,还有 Remove-Mailbox 似乎会删除邮箱和用户帐户对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2011-03-23
    • 1970-01-01
    • 2022-12-03
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多