2016年12月28日 星期三

使用powershell指令批次更改Exchange Online的使用者設定


前面幾篇參考網友提供的powershell指令大都是適用於Office365,但不適用於Exchange Online本身,本篇紀錄批量修改Exchange 使用者的指令設定,目的是將使用者信箱的顯示名稱前面加上部門名稱,比如:「XXX有限公司-王小明」

以系統管理員身分執行Windows PowerShell ,執行前可能需要安裝一些程式,可Google得到,在此不提供。



    1. 進行Exchange管理帳號登入
      $cred = Get-Credential -cred $credential
        2. 連線至Exchange Online
          $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic –AllowRedirection
            3. Windows PowerShell 必須加以設定才能執行指令碼。只需要設定一次。
              Set-ExecutionPolicy RemoteSigned
                4. 載入模組
                  Import-PSSession $Session
                    5. 透過 $Account變數紀錄全部使用者
                      $Account = Get-User
                        6. 將所有信箱的現有DisplayName前面加上該使用者的Department
                          foreach($a in $Account){Set-Mailbox -Identity $a.name -DisplayName (“(”+$a.Department.ToString()+”)”+$a.DisplayName.ToString())}

                          建議在套用全部使用者之前,先小部份試驗,確認試驗成功之後再一次批量修改,減少錯誤的影響範圍。

                          比如可將 $Account變數指定為:
                          $Account = Get-User | where{$_.department -like"資訊部"}
                          將搜尋範圍指定為資訊部,即可將部門欄位為資訊部的使用者指定至$Account變數,再修改之。

                          2017/02/13 新增
                          批次上傳通訊錄(新增外部聯絡人):

                          CSV檔案的FirstName欄位對應EX Online的Name欄位;Name欄位對應EX Online的Name欄位
                          Import-Csv .\ExternalContacts.csv|%{New-MailContact -DisplayName $_.
                          DisplayName -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress -FirstName $_.FirstName -LastName $_.LastName}
                          增加通訊錄欄位資訊(需與上面步驟一起執行,通訊錄資訊顯示才會正常)
                          $Contacts = Import-CSV .\Desktop\ExternalContacts.csv
                          $Contacts | ForEach {Set-Contact $_.Name -Company $_.Company -Title $_.Title -Department $_.Department -Office $_.Office}

                          移除通訊錄所有聯絡人(請謹慎使用!謹慎使用!謹慎使用!):
                          Get-MsolContact -All | Remove-MsolContact -Force
                          移除通訊錄所有群組(請謹慎使用!謹慎使用!謹慎使用!):
                          Get-MsolGroup -All | Remove-MsolGroup -Force