【问题标题】:Delete Directories Based on Existing Active Directory Accounts Using PowerShell使用 PowerShell 根据现有 Active Directory 帐户删除目录
【发布时间】:2015-03-27 11:03:08
【问题描述】:

我正在寻找一种方法来使用 PowerShell 从特定 OU 中的 Active Directory 生成帐户名称列表,然后将该列表与从包含用户主文件夹的网络共享生成的另一个列表进行比较登录。

这样做的目的是比较两个列表,然后删除任何出现在从 Active Directory 获取的帐户名列表中的文件夹。

我将使用的 OU 是这样嵌套的:

domainname.org | People | Internal | Users 

这个 OU 大约有 25,000 个名称(每个用户的 ID 号)。

目录结构稍微复杂一些。它分为三个主要目录,每个目录都有位置名称,然后包含用户的主文件夹。

一个例子是:

\\user-storage\Users\Division1\LOC1\USERID

其中 USERID 是 OU 中列出的名称。

此 OU 中的所有用户也都在同一个组中,因此,如果这样做更容易或有任何帮助,那也是一种方法。

【问题讨论】:

  • 你可以只取 AD 中的用户名,然后取最后一个“\”的索引,一旦你有了剩下的字符,应该是 userid 然后选择 userid 不匹配的位置在 AD 用户名数组中
  • 所以文件夹的名称是活动目录中的名称属性是吗?到目前为止,您还有什么可以构建的吗
  • @Matt 是的,这是正确的。好吧,我所拥有的完全被 TheMadTechnician 发布的内容从水中吹走了。我是 PowerShell 的新手,当我将它与他的简短脚本进行比较时,我拼凑起来的东西让我哭泣。

标签: powershell active-directory


【解决方案1】:

我会使用正则表达式匹配。可以肯定的是,即使有 2500 个项目,您仍然可以做到这一点。

$UserNames = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Internal,OU=People,DC=domainname,DC=ORG" | Select -ExpandProperty samaccountname
$UserRegex = ($UserNames | ForEach{[RegEx]::Escape($_)}) -join "|"
Get-ChildItem -Path "\\user-storage\Users\*\*\*" -Directory | Where{$_.Name -notmatch $UserRegex} | Remove-Item -Force -WhatIf

这将查看 \user-storage\users 文件夹中所有 5 层的文件夹,并对照用户列表进行检查。如果没有找到,它会递归地删除它。我在上面放了一个-WhatIf,这样你就可以在不丢失数据的情况下测试它。 -Force 让它删除文件夹,即使里面还有东西。

【讨论】:

  • 非常感谢您的快速回复。现在我确定我在这里遗漏了一些完全微不足道的东西,但是当我运行它时,我得到了错误。 “Get-ADUser : Directory object not found”。我是否应该从特定位置运行它,而不仅仅是可以访问网络共享的工作站?
  • 您需要验证搜索库的路径。拉起该 OU 中的任何用户并确保它看起来正确。只要您的登录名可以访问查询 AD,并且您所在的计算机是域成员,那么代码应该可以正常工作。
  • 我想通了。我进入 ADSI 编辑并查看了 OU 的 distinctName。事实证明,我必须以相反的顺序放置所有内容。所以它是"OU=People,OU=Internal,OU=Users,DC=domainname,DC=ORG"。我还添加了-Recurse,所以它会删除子项目。但是,一旦我删除了-WhatIf,我会收到一条错误消息,上面写着 "Remove-Item : The specified path, file name, or both are too long. 完全限定的文件名必须少于 260 个字符,并且目录名称必须少于 248 个字符。” 所以接下来我将尝试对其进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2011-06-08
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多