如何使用服务账户凭据在PowerShell中获取共享邮箱列表
使用服务账户获取Exchange Online共享邮箱列表的PowerShell脚本
没问题,我来帮你把原来的管理员凭据方式改成服务账户访问的版本!要实现这个,我们需要借助Azure AD应用注册完成OAuth认证(这是Exchange Online推荐的服务账户访问方式,比旧的Basic认证更安全也更符合微软的最新规范),下面是详细步骤和脚本:
1. 前期准备:配置Azure AD应用
首先得在Azure门户里搞定应用注册和权限:
- 登录Azure Portal,搜索并进入「应用注册」,新建一个应用(或者用现有应用也可以)
- 切换到「API权限」页面,点击「添加权限」→ 找到「Exchange」→ 选择「应用权限」,然后添加
Mailbox.Read.All权限(如果需要管理邮箱可以加Exchange.ManageAsApp,但仅获取列表的话前者足够) - 点击「授予管理员同意」,确保权限生效
- 选择身份验证方式:可以用客户端密码(简单易操作)或者证书(更安全,推荐生产环境用),这里两种方式我都会给出示例
2. 安装Exchange Online管理模块
首先确保你装了最新的Exchange Online V2模块(微软已经弃用旧的PSSession方式了):
Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber
3. 脚本实现
方式1:使用客户端密码(快速上手)
把下面的占位符替换成你的实际信息:
# 替换为你的租户ID、应用ID和客户端密码 $tenantId = "你的Azure租户ID" # 可在应用注册的「概述」页找到 $clientId = "你的应用客户端ID" # 同样在应用注册概述页 $clientSecret = ConvertTo-SecureString "你的应用客户端密码" -AsPlainText -Force # 创建凭据对象 $credential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret) # 连接Exchange Online Connect-ExchangeOnline -Credential $credential -ExchangeEnvironmentName O365Default -TenantId $tenantId # 获取共享邮箱列表,输出名称和邮箱地址 Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited | Format-Table Name, WindowsEmailAddress -AutoSize # 可选:断开连接 Disconnect-ExchangeOnline -Confirm:$false
方式2:使用证书(生产环境推荐)
如果你用证书认证,先把证书上传到应用注册的「证书和机密」页面,然后用证书指纹来连接:
# 替换为你的租户ID、应用ID和证书指纹 $tenantId = "你的Azure租户ID" $clientId = "你的应用客户端ID" $certThumbprint = "本地证书的指纹" # 可以在证书管理器里查看 # 连接Exchange Online Connect-ExchangeOnline -CertificateThumbprint $certThumbprint -AppId $clientId -Organization "你的租户域名.onmicrosoft.com" # 获取共享邮箱列表 Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited | Format-Table Name, WindowsEmailAddress -AutoSize # 断开连接 Disconnect-ExchangeOnline -Confirm:$false
几个注意点
- 一定要确保应用的权限已经获得管理员同意,不然会报权限不足的错误
- 如果之前装过旧版本的Exchange模块,记得更新到最新版,不然可能不支持服务账户连接
- 旧的
New-PSSession方式微软已经在逐步淘汰,建议尽快切换到V2模块的Connect-ExchangeOnline方式
内容的提问来源于stack exchange,提问作者Daksh Padiya
相关产品推荐
相关产品推荐

