我正在寻找一种方法来使用PowerShell从特定OU中的Active Directory生成帐户名列表,然后将该列表与从网络共享生成的另一个列表进行比较,该网络共享包含他们连接到的用户的主文件夹登录。
这样做的目的是比较两个列表,然后 DELETE 从Active Directory中获取的帐户名列表中 NOT 的任何文件夹。
我将使用的OU嵌套为:
domainname.org | People | Internal | Users
此OU有大约25,000个名称(每个用户的ID号)。
目录结构有点复杂。它分为三个主目录,每个目录都有位置名称,然后包含用户的主文件夹。
一个例子是:
\\user-storage\Users\Division1\LOC1\USERID
其中USERID是OU中列出的名称。
此OU中的所有用户也在完全相同的组中,因此如果这样可以更容易或以任何方式提供帮助,那么这也是一种方法。
答案 0 :(得分: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
会删除该文件夹,即使该文件夹中仍有内容。