2014-03-03 78 views
0

我对PowerShell相当陌生,我在很多论坛发布了这个帖子,但之前我从这里获得了编程帮助,尽管这不是严格编程,但我希望有人可能知道答案。PowerShell:将CSV与AD进行比较

我的组织有大约5,300个用户需要禁用客户端。有人认为我们这个时代的最佳用途是让人们通过AD并逐一禁用它们。不久之后,我停下脚步,使用PowerShell获取我们已有的CSV列表,并运行一个cmdlet以禁用CSV列表中的所有用户。

这似乎工作,但我想进行比较。我想比较CSV文件中的用户和AD中的用户,并确认它们全部被禁用,无需单独检查所有5300。我们检查了大约60个随机数据,以验证我的运行是否正常,但我想确保没有任何漏洞能够通过。

我已经尝试了几个脚本,我尝试了一些cmdlet的变体。我尝试过的脚本甚至都没有工作,出现错误的垃圾邮件。当我尝试从csv文件中使用get-content或import-CSV来运行AD的搜索时,当我导出它给我约7600个禁用用户时(如果我通过禁用搜索)。总共只有5300个用户,所以它必须给我所有AD的残疾用户。我运行的其他cmdlet似乎也做了同样的事情,它导出了一个完整的AD列表,而不是仅仅比较我的CSV文件。

任何人都可以提供帮助将是有帮助的。

+0

此外,我们正在离我们的CSV文件,只是使用FDN用户的列表,以便在例如一行是CN =用户名称,OU = ImInHere,DC =域名,DC = com – user2783652

+0

因此,只需要一个“foreach(CSV用户)报告”。 $ _。基本禁用? –

+0

奥斯汀,基本上。需要查看CSV以获取用户名来检查,然后在AD中检查该用户,看看它是启用还是禁用(我对任何一个都没问题),然后向我显示该数据。所以,如果有任何启用,我可以确保他们被禁用。 – user2783652

回答

0

不知道您的CSV的确切结构我要承担这将返回所有用户从您的电子表格以下如下: “CN =”,“OU =”,“DC =” “JSmith”,“Accounting”,“Foo.com” “BAnderson”,“HR”,“Foo.com” “JAustin “,”IT“,”Foo.com“

也就是说,如果您的第一个字段实际上包含CN =(即”CN = JSmith“,”OU = Accounting“,”Foo.com“)你会想用.TrimStart("CN=")来修剪。

$ToRemove = Import-CSV UserList.csv 
[email protected]() 
ForEach($User in $ToRemove){ 
    $Temp = ""|Select "User","Disabled" 
    $Temp.User = $User.'CN=' 
    If((Get-aduser $Temp.User -Prop Enabled).Enabled){$Temp.Disabled='False'}else{$Temp.Disabled='True'} 
    $UserList+=$Temp} 
$UserList|?{$_.Disabled -eq 'False'} 

加载该CSV到一个变量,贯穿一个循环,检查CN ='属性每张清单,创建仅包含它们的名称中的每个用户的自定义对象,并且如果它们将被禁止,然后将将该对象存储到数组中以便稍后使用。最后,您剩下的$ UserList会列出原始CSV中的所有人,并且它们是否被禁用。您可以将其输出到一个文件,只为那些仍然启用的文件或任何您想要的文件进行过滤。正如前面提到的,如果您的CSV实际上已经CN = JSMITH的每一行,你会想更新5行看成这样:

$Temp.User = $User.'CN='.TrimStart("CN=") 

如果你没有在CSV文件可能需要注入任何头他们。或者,如果你有不同的OU深度,你最好做一个GC,然后通过一个分裂来运行每一条线,然后把第一条线部分,修整CN =关开始,检查,看看他们是否被禁用,如:

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

假设您CSV有一个名为DN列,你可以运行的启用

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

我没有DN字段。在CSV文件中,它只是CN =,OU =和DC =。这就像它一样深。 – user2783652

+0

我说__列叫做DN_,所以你需要在你的DN列表的顶部放一个名为DN的标题。 Comprende? – Raf