2014-03-03 79 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