【问题标题】:Moving users to a disabled OU in Powershell在 Powershell 中将用户移动到禁用的 OU
【发布时间】:2018-04-26 17:11:15
【问题描述】:

我正在尝试将我的禁用用户移动到 AD 中的正确 OU。我已经尝试使用这段代码一段时间了,逻辑对我来说似乎是合理的。请让我知道您的想法:

$disalbled= Search-ADAccount -AccountDisabled -UsersOnly | Select SamAccountName | export-csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv' -NoTypeInformation

$disbaledlist = import-csv 'C:\Users\andrew.schilling\Desktop\test\Test.csv' 

foreach ($aduser in $disabledlist) { 
 Move-ADObject -Identity $aduser -TargetPath $OUTransfer 
 }

【问题讨论】:

  • 有什么问题?
  • 它不会抛出错误,但它不会移动用户
  • 只是一个猜测,但它可以是任何有权利的东西吗?手动可以吗?
  • 您有多个域控制器吗?如果您查看的不是执行移动的同一域控制器,则在复制完成之前您不会看到更改。
  • 不,我们只有一个 DC

标签: powershell active-directory


【解决方案1】:

复制您的代码似乎试图做的最简单的方法是:

$OUTransfer = "CN=Disabled Users Accounts,DC=Company,DC=local"

$DisabledUsers = Search-ADAccount -AccountDisabled -UsersOnly
$DisabledUsers |
    Select-Object -ExpandProperty SamAccountName |
    Export-Csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv'

$DisabledUsers | Move-ADObject -TargetPath $OUTransfer

但是,您将包含$OUTransfer OU 中的所有用户。那是浪费精力。我会像这样替换最后一行:

$DisabledUsers |
    Where-Object DistinguishedName -notlike "*$OUTransfer" |
    Move-ADObject -TargetPath $OUTransfer

如果您根本不需要 CSV 并且只是将其用作某种形式的临时存储,那么您可以进一步简化它:

$OUTransfer = "CN=Disabled Users Accounts,DC=Company,DC=local"

Search-ADAccount -AccountDisabled -UsersOnly |
    Where-Object DistinguishedName -notlike "*$OUTransfer" |
    Move-ADObject -TargetPath $OUTransfer

【讨论】:

  • 感谢您的帮助。它现在会抛出一条错误消息,这比我使用的要好。错误是 Move-ADObject : 无法执行操作,因为对象的父对象未实例化或已删除 At line:5 char:5 + Move-ADObject -TargetPath $OUTransfer
  • @AJSKRILLA 你确定你的$OUTransfer 是一个存在的位置并且你有正确的DistinguishedName 吗?看起来在您上面的一个 cmets 中,您的 DN 中可能有一个额外的空间
【解决方案2】:

而目标 OU 是 $OUTransfer = "CN= Disabled Users 帐户,DC=公司,DC=本地”

这有两个可能的问题:

  1. 如果是 OU,则应以 OU= 开头。它可能是“容器”而不是“OU”。如果是这样,那就没问题了。
  2. = 后面有一个空格。应该没有空格。

【讨论】:

    【解决方案3】:

    首先,您需要拥有每个用户的 DN 才能移动他们。

    Get-Help Move-ADObject -Examples
    

    概要 将 Active Directory 对象或对象容器移动到不同的容器或域。

    -------------------------- EXAMPLE 1 --------------------------
    
    C:\PS>Move-ADObject -Identity "OU=ManagedGroups,DC=Fabrikam,DC=Com"TarrgetPath "OU=Managed,DC=Fabrikam,DC=Com"
    

    改变这个:

    $disalbled= Search-ADAccount -AccountDisabled -UsersOnly | Select SamAccountName | export-csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv' -NoTypeInformation
    

    致此:

    $disalbled= Search-ADAccount -AccountDisabled -UsersOnly | Select DistinguishedName | export-csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv' -NoTypeInformation
    

    其次,您需要指定您在 CSV 中选择的列(在 你的 foreach 循环)

    你可以这样做:

    foreach ($aduser in $disabledlist) { 
     Move-ADObject -Identity $aduser.DistinguishedName -TargetPath $OUTransfer 
     }
    

    完整解决方案:

    $OUTransfer = "CN=Disabled Users Accounts,DC=Company, DC=local"
    $disalbled= Search-ADAccount -AccountDisabled -UsersOnly | Select DistinguishedName | export-csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv' -NoTypeInformation
    $disabledlist = import-csv 'C:\Users\andrew.schilling\Desktop\test\Test.csv'
    
    foreach ($aduser in $disabledlist) { 
        Move-ADObject -Identity $aduser.DistinguishedName -TargetPath $OUTransfer  
     }
    

    【讨论】:

    • 我已经按照你的建议重写了它,它仍然在处理,但没有出错。当前脚本是
    • $OUTransfer = "CN=禁用用户帐户,DC=公司,DC=本地" $disalbled= Search-ADAccount -AccountDisabled -UsersOnly |选择专有名称 | export-csv -Path 'C:\Users\andrew.schilling\Desktop\test\Test.csv' -NoTypeInformation $disbaledlist = import-csv 'C:\Users\andrew.schilling\Desktop\test\Test.csv' foreach ($Disabledlist.DistinguishedName 中的 $DistinguishedName) { Move-ADObject -Identity $aduser -TargetPath $OUTransfer }
    • @AJSKRILLA 我更新了答案以包含完整的解决方案。试试看,如果它仍然不起作用,请告诉我。 - 提示:你可以Write-Host $aduser查看它是否正确地从CSV中获取条目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多