使用 PowerShell 根据现有 Active Directory 帐户删除目录

Delete Directories Based on Existing Active Directory Accounts Using PowerShell

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

这样做的目的是比较两个列表,然后 DELETE 帐户名称列表中 NOT 的任何文件夹取自 Active Directory。

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

domainname.org | People | Internal | Users 

这个OU大概有25000个名字(每个用户的ID号)。

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

例如:

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

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

此 OU 中的所有用户也都在完全相同的组中,因此如果这样可以使它更容易或以任何方式提供帮助,那也是一种方式。

我会使用正则表达式匹配。很确定即使有 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 让它删除文件夹,即使里面还有东西。