我正在嘗試從我們的學區 ADS 中清除用戶,以實作我們設定的一些內務管理目標。現在我有一個很好的腳本可以找到所有停用的學生帳戶,并在停用 30 天后將其洗掉。我們發現,即使我們從 ADS 中洗掉這些用戶,它們也會在 AAD 中的已洗掉用戶檔案夾中額外保留 30 天。我正在嘗試構建一個腳本來查找 AAD 中已洗掉用戶檔案夾中的所有用戶,然后將其與 ADS 中的用戶進行匹配,同時還避免設定為不與 AAD 同步學生資料的 2 個 OU . 我的腳本的前半部分很簡單,因為我只需要 AAD 中已洗掉用戶檔案夾中的名稱。
Get-MsolUser -ReturnDeletedUsers | Select DisplayName, ObjectId | Export-Csv -LiteralPath C:\Results\DeletedUsers.csv -NoTypeInformation
這給了我一個 csv 可供使用,但這是一個大問題。我無法做出在 AAD 和 ADS 之間共享的一對一選擇。到目前為止,我發現的最好的事情是在我的后續腳本中指定使用來自 AAD (studentid#@domain.org) 的 DisplayName 與 ADS 中的 UserPrincipalName。
$Users = Get-Content C:\Results\DeletedUsers.csv
ForEach ($User in $Users){
Get-ADUser -Filter * -Properties UserPrincipalName | Where { ($_.UserPrincipalName -Like $User) }
}
這里的問題是,這后半部分已經運行了很長時間,我需要一些更可靠和更快的東西。
uj5u.com熱心網友回復:
您的代碼的主要問題在于foreach回圈邏輯,您在每次回圈迭代時查詢域中的所有用戶,而不是過濾特定用戶。另一方面,不清楚您的 AD On Premises 是否與 Azure AD 同步,為什么不洗掉 AD On Prem 中的物件并讓它們與 Azure AD 同步呢?另一個問題是您只從查詢中選擇DisplayName和屬性,這樣做會切斷重要屬性,這些屬性在搜索 AD On Prem 中的 AD 物件時會派上用場,例如、、。ObjectIdGet-MsolUseronPremisesDistinguishedNameonPremisesSamAccountNameonPremisesUserPrincipalName
對您的代碼的直接修復是這樣,但是您應該考慮上面提到的內容。
$Users = (Import-Csv C:\Results\DeletedUsers.csv).DisplayName
$OUsToSkip = ('OU=something,DC=something', 'OU=somethingelse,DC=something') -join '|'
foreach($User in $Users) {
# mail attribute is equal to `$user` OR UPN is equal to `$user`
$filter = "(|(mail=$user)(userprincipalname=$user))"
$usr = Get-ADUser -LDAPFilter $filter
if($usr.DistinguishedName -notmatch $OUsToSkip -and $usr) {
$usr
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/461515.html
