Shunze 學園 (http://www.shunze.info/forum/index.php)
|- Exchange 2010 (http://www.shunze.info/forum/board.php?boardid=29)
|-- 《分享》Powershell啟用OU中的使用者及群組mail功能 (http://www.shunze.info/forum/threadid.php?boardid=29&threadid=1786)


作者: shunze 發表時間: 2014-01-27, 00:25:

《分享》Powershell啟用OU中的使用者及群組mail功能

操作環境
網域:test.com.tw
Domain Controller:test-AD.test.com.tw
Exchange Server:Mail-Exchg2010.test.com.tw
Exchange Mail Database:testmailbox
OU:Test-OU
使用者帳號:ShunzeA (mail已啟用) ShunzeB (帳號停用) ShunzeC (mail未啟用)
群組帳號:ShunzeGP1 (mail已啟用) ShunzeGP2 (mail未啟用)




處理邏輯

  1. 透過ADSI取得OU物件,逐一判斷OU物件中的子物件為使用者或群組,再分別處理。
  2. 若子物件為使用者,依帳號啟用與否及mail功能啟用與否,進行對應處理。
  3. 若子物件為群組,依群組mail功能啟用與否,進行對應處理。
  4. 為避免群組中文名稱影響email address之建立,透過互動輸入,讓操作者輸入群組的Alias,做為email建立依據。
  5. 若暫時不想為群組建立mail功能,可直接於輸入內容按下enter,略過mail建立功能。


Script
$member=[ADSI]"LDAP://test-AD/OU=Test-OU,DC=test,DC=com,DC=tw"

# 使用者帳號啟用與否的數值陣列
$EnableNum ={512,544,66048,66080,262656,262688,328192,328224}
$DisableNum={514,546,66050,66082,262658,262690,328194,328226}

foreach ($item in $member.psbase.children) {
    if ($item.psbase.schemaclassname -eq "user") {
        # 物件為 user 處理邏輯
        $user=$item.name
        $value= $item.useraccountcontrol
        $homeMDB=$item.homeMDB
        if ("$DisableNum".contains( $value )) {
            Write-Host "Account '$user' disabled"
        } elseif ( "$EnableNum".contains( $value )) {
            if ($homeMDB) {
                Write-Host "Acount '$user' mailbox exist!"
                Write-Host $homeMDB
            } else {    
                Write-Host "Enable $user MailBox..."
                Enable-Mailbox -Identity test\$user -Alias $user -Database "testmailbox" -DomainController "test-AD.test.com.tw" -Confirm
            }
        } else {
            Write-Host "Other Type account, useraccountcontrol value $value ."
        }
    } elseif ($item.psbase.schemaclassname -eq "group") {
        # 物件為 group 處理邏輯
        $group=$item.name
        $legacyExchangeDN=$item.legacyExchangeDN
        if ($legacyExchangeDN) {
            Write-Host "Group '$group' mailbox exist!"
            Write-Host $legacyExchangeDN
        } else {
            $alias = Read-Host "Please input the email address alias for GROUP $group"
            if ($alias) {
                Enable-DistributionGroup -Identity test\$group -Alias $alias -DomainController "test-AD.test.com.tw" -Confirm
            } else {
                Write-Host "Failed to create group '$group' mailbox..."
            }
        }
    }
    Write-Host
}


指令碼簡單說明如下
  • $member=[ADSI]“LDAP://test-AD/OU=Test-OU,DC=test,DC=com,DC=tw" 透過ADSI來取得test-AD.test.com.tw網域堛摟U物件Test-OU集合。
  • $member.psbase.children 取得OU下的子物件,諸如使用者,群組,聯絡人...等。
  • useraccountcontrol、homeMDB 藉由這兩個使用者物件屬性來判斷使用者帳號的啟用狀態與mail功能。未建立mail,homeMDB值為null。
  • legacyExchangeDN 藉由此屬性來判斷群組mail功能是否啟用。未啟用為null值。
  • -Alias 群組email address組合自Alias+網域。透過輸入功能,讓操作員輸入群組的Alias;不輸入,停止建立群組email。


將script儲存為副檔名ps1的檔案後,執行此script畫面擷圖如下:



UserAccountControl Value參考資料
Active Directory UserAccountControl Value

Powered by: Burning Board 1.1.1 2001 by WoltLab
Taiwan Translation by Achi