PowerShell:将CSV与AD进行比较

PowerShell:将CSV与AD进行比较,powershell,csv,import,Powershell,Csv,Import,我是PowerShell的新手,我在许多论坛上发布了这篇文章,但我以前在这里获得过编程帮助,虽然这不是严格意义上的编程,但我希望有人知道答案 我的组织有大约5300个用户,我们需要为客户端禁用。有人决定最好地利用我们的时间是让人们通过广告,一次禁用一个。一听到这个消息,我就停止了,使用PowerShell获取我们已经拥有的CSV列表,并运行cmdlet禁用CSV列表中的所有用户 这似乎有效,但我想进行比较。我想将CSV文件中的用户与AD中的用户进行比较,并确认它们都已禁用,而无需单独检查所有53

我是PowerShell的新手,我在许多论坛上发布了这篇文章,但我以前在这里获得过编程帮助,虽然这不是严格意义上的编程,但我希望有人知道答案

我的组织有大约5300个用户,我们需要为客户端禁用。有人决定最好地利用我们的时间是让人们通过广告,一次禁用一个。一听到这个消息,我就停止了,使用PowerShell获取我们已经拥有的CSV列表,并运行cmdlet禁用CSV列表中的所有用户

这似乎有效,但我想进行比较。我想将CSV文件中的用户与AD中的用户进行比较,并确认它们都已禁用,而无需单独检查所有5300。我们随机检查了大约60个,以验证我的跑步是否有效,但我想确保没有一个滑过裂缝

我尝试了几个脚本,并尝试了cmdlet的一些变体。我试过的脚本没有一个能正常工作,错误频频出现。当我尝试使用get content或从CSV文件导入CSV来运行广告搜索时,当我导出它时,会给我大约7600个禁用用户(如果我按禁用搜索)。总共只有5300个用户,因此它必须为我提供AD中所有禁用的用户。我运行的其他cmdlet似乎也做了同样的事情,它导出了整个广告列表,而不仅仅是与我的CSV文件进行比较


任何人可以提供的任何帮助都会很有帮助。

假设您的CSV有一个名为DN的列,您可以运行以下命令,该命令将从您的电子表格中返回所有已启用的用户

import-csv YourUsersCSV.csv | Get-ADUser -Filter 
     {DistinguishedName -eq $_.DN } |
     where{$_.enabled -eq $true} | 
     Select-Object -Property DistinguishedName,samaccountname,enabled

在不知道CSV的确切结构的情况下,我将假设它是这样的: “CN=”,“OU=”,“DC=” “JSmith”、“会计”、“Foo.com” “BAnderson”、“HR”、“Foo.com” “JAustin”,“IT”,“Foo.com”

也就是说,如果您的第一个字段实际包含CN=(即“CN=JSmith”、“OU=Accounting”、“Foo.com”),您将希望使用
.TrimStart(“CN=”)
对其进行修剪

它将CSV加载到一个变量中,通过检查“CN=”属性的循环运行每个列表,为每个用户创建一个仅包含其名称的自定义对象(如果禁用了),然后将该对象添加到数组中以便于以后使用。最后剩下$UserList,它列出了原始CSV中的所有人,以及他们是否被禁用。您可以将其输出到一个文件中,仅过滤那些仍处于启用状态的文件,或者任何您想要的内容。如前所述,如果您的CSV实际上每行都有CN=JSmith,则您需要更新第5行,使其看起来像这样:

    $Temp.User = $User.'CN='.TrimStart("CN=")
如果CSV文件中没有任何头文件,则可能需要插入它们。只需在顶部画一行,如下所示:
CN=,OU=,DC= 或者,如果您有不同的OU深度,您最好先执行GC,然后通过拆分运行每一行,取第一部分,从开头修剪CN=并检查它们是否被禁用,如:

GC SomeFile.CSV||%{$_.split(",")[0].trimstart("CN=")|%{If((get-aduser $_ -prop enabled).enabled){"$_ is Enabled"}else{"$_ is Disabled"}}}

此外,我们正在处理的CSV文件只是一个使用FDN的用户列表,因此其中一行的示例是CN=users Name,OU=iminher,DC=domain,DC=comSo,这只是一个
foreach(CSV中的用户)|$.
基本禁用的报告?基本上是Austin。需要它查看CSV以获得要检查的用户名,然后在AD中检查该用户,查看其是否已启用或已禁用(我对其中任何一个都满意),然后显示该数据。因此,如果任何一个被启用,我可以确保它们被禁用。我没有DN字段。在CSV文件中,它只有CN=、OU=、DC=。我说的是一个名为DN的列,所以你需要在DNs列表的顶部放一个名为DN的标题。压缩?
GC SomeFile.CSV||%{$_.split(",")[0].trimstart("CN=")|%{If((get-aduser $_ -prop enabled).enabled){"$_ is Enabled"}else{"$_ is Disabled"}}}