2017-01-23 106 views
2

我正在對AD運行附加的腳本。我只需要腳本返回每個AD帳戶一次,但它似乎在無限循環中運行。如何停止循環腳本

如何停止?

感謝

Search-ADAccount -AccountExpired | foreach { get-aduser -Filter 'description -like "*leaver*"' } 

回答

4

問題在於過於複雜foreach循環和過濾不良查詢中。讓我們仔細看看:

Search-ADAccount -AccountExpired | foreach { # 1 
    get-aduser -Filter 'description -like "*leaver*"' # 2 
} 

在部分#1中,您將看到已過期的所有用戶和計算機帳戶的列表。到現在爲止還挺好。

在零件#2中,您逐個傳遞管道上的每個過期帳戶。現在,對於已過期帳戶找到,您搜索AD爲所有用戶帳戶描述包含字符串leaver。這完全沒有意義。 (更糟糕的是,搜索子串需要讀取每個對象的描述。)

作爲一個具體示例,擁有100個過期帳戶和1000個AD用戶帳戶,循環正在執行100 * 1000次搜索操作。哎呀!難怪它似乎需要很長時間。

作爲工作的替代,可以考慮像這樣(沒有真實的域名測試,所以因人而異),

$expiredAccounts = Search-ADAccount -AccountExpired # 1 
$expiredAccounts| foreach { # 2 
    get-aduser -Filter {samaccountname -eq $_.samaccountname -and description -like "*leaver*"} # 3 
} 

在部分#1,保存過期的賬戶中的變量。這沒有什麼區別,但如果稍後需要這些,則不需要重新搜索廣告。

在零件#2中,管道結果向前。這裏沒什麼重要。

在零件#3中,用更有效的過濾搜索AD。

+0

你是一個拯救生命的人!謝謝!完美的作品! –