我的博客园:https://www.cnblogs.com/CQman/
如何通过PowerShell批量修改O365用户的office phone属性值?
需求信息:
组织中的O365用户在创建时,已手动录入了办公电话(Office phone),现在需要在办公电话前面加上统一的数字,如"0571-0985",以批量的方式统一修改。
备注: O365用户的Office phone对应Exchange邮箱用户的Work phone
O365用户的Mobile phone 对应Exchange邮箱用户的Mobile phone
用户后台的属性是:Office phone和Work phone对应 PhoneNumber; Mobile phone对应Mobilephone

O365管理控制台:

Exchange admin center:

解决方法:
通过get-mailbox命令获取邮箱账号,再使用筛选命令只获取邮箱用户(排除"会议室账号"),之后将数据传递给get-msoluser来获取用户的phone属性值并把已有的phone属性值
赋给一个变量进行保存;然后进行特定电话号码前缀组合,并把值赋给一个新的变量,最后使用Set-MsolUser进行更改设置,最后会把所有已更改的用户的DisplayName,UserPrincipalName,PhoneNumber输出进行展示。
步骤:
- 打开powershell ISE把下面的命令复制到powershell ISE中,或者保存为一个.ps1脚本文件。
#Change Powershell execution policy
Set-Executionpolicy -scope Process -executionPolicy Unrestricted -force
#connect to Exchange online
$UserCredential = Get-Credential
exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://partner.outlook.cn/PowerShell -Credential UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $exchangeSession -DisableNameChecking -AllowClobber
#connect to Office 365
Import-Module MSOnline
Connect-MsolService -AzureEnvironment AzureChinaCloud -Credential $UserCredential
#Get all mailbox users
users = Get-Mailbox -ResultSize unlimited -Filter {(RecipientTypeDetails -eq 'UserMailbox')}\|% {Get-MsolUser -UserPrincipalName _.UserPrincipalName }
$Output = @()
#Traversing every user and make changes
foreach(user in users){
if(user.PhoneNumber -ne null )
{
phone = user.PhoneNumber
$Prefix = "+86" #这里以+86为例
PN = Prefix + $phone
Set-MsolUser -UserPrincipalName user.UserPrincipalName -PhoneNumber PN
output += Get-MsolUser -UserPrincipalName user.UserPrincipalName |Select-Object DisplayName,UserPrincipalName,PhoneNumber
}
else {continue}
}
$output |Out-GridView
注意:以上命令只针对邮箱用户且原始Office phone(或Work phone)属性不为空。
修改前
Get-MsolUser |ft DisplayName ,UserPrincipalName,PhoneNumber

运行命令后:

注意:上面的命令并不会对会议室邮箱的电话属性值进行更改。
输出内容
