[玩转系统] 使用 PowerShell 在 Office 365 中查找电子邮件地址
作者:精品下载站 日期:2024-12-14 03:40:21 浏览:13 分类:玩电脑
使用 PowerShell 在 Office 365 中查找电子邮件地址
有时您需要查找使用特定电子邮件地址的用户或邮箱。特别是别名有时很难找到,您不想打开每个邮箱来检查它是否使用您需要的电子邮件地址。
您可以向不同位置的用户或组添加电子邮件地址,但它们都集中在您的 Exchange Online 服务器中。这就是我们要搜索的地方。
我们将为此使用新的 Exchange Online PowerShell 模块,如果您以前没有使用过它,那么您可以按照这个简短指南安装它并连接到 Exchange Online。新模块的优点是可以轻松连接到不同的租户,并且支持MFA。
使用 PowerShell 查找电子邮件地址
邮箱的所有电子邮件地址都列在 EXOMailbox
cmdlet 的 EmailAddresses 属性中。我们可以通过对电子邮件地址应用过滤器来搜索任何电子邮件地址。过滤器的优点是我们还可以使用通配符。
让我们从简单的开始,搜索特定的电子邮件地址。在示例中,我们将查找谁在使用 [email protected] 电子邮件地址。
# Make sure you are connected to Exchange Online
Connect-ExchangeOnline
# Search for the emailaddress
# -eq stands for equels, so the emailaddress must be exactly the same as the given string
Get-EXOMailbox -filter {EmailAddresses -eq "[email protected]"}
结果是一个包含我们正在查找的电子邮件地址的邮箱。
使用通配符
通配符允许您搜索电子邮件地址的一部分。在 PowerShell 中,您可以使用 * 作为通配符标记,它可以放置在字符串中的任何位置。
假设我们想要查找电子邮件地址包含“支持”一词的所有邮箱。我们将在支持一词前后使用通配符。请注意,我们没有使用 -eq
运算符,而是使用 -like
运算符。
当您期望多个结果时,使用 ft
cmdlet 在表中格式化输出是最有用的
# Get all mailboxes that contain the word support
Get-EXOMailbox -Filter {EmailAddresses -like "*support*"} | ft
格式表输出 (ft) 的一个缺点是并非所有属性都适合您的屏幕。要解决此问题,您可以仅选择所需的字段,自动调整表格大小并换行。
Get-EXOMailbox -Filter {EmailAddresses -like "*support*"} |
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap
在通讯组列表中搜索
上面的 PowerShell 命令会在所有邮箱中搜索邮件地址。但电子邮件地址也可以在通讯组列表或 Office 365 组中使用。
要搜索分发列表,我们需要使用 Exchange Online 模块中的 Get-DistributionGroup
cmdlet。
通讯组列表中有两个电子邮件字段:PrimarySMTPAddress
和 EmailAddresses
。我们将使用后者,因为它还将包含分发列表中的所有别名。
Get-DistributionGroup -Filter {EmailAddresses -like "*support*"} |
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap
在 Office 365 组中搜索电子邮件地址
您可能想要搜索电子邮件地址的最后一个位置是 Office 365 组。这些组与通讯组具有相同的结构,因此我们将在 emailaddresses
字段中进行搜索。
Get-UnifiedGroup -Filter {EmailAddresses -like "*support*"} |
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap
Powershell 列出所有电子邮件地址和别名
利用这一原理,我们还可以获得包含所有电子邮件地址和别名的列表,并将其导出到 CSV 文件等。
获取包含电子邮件地址的列表有点困难,因为 EmailAddresses 字段还包含 SPO(用于 SharePoint Online 功能)和 SIP 地址。所以我们需要过滤掉这些。
通过使用表达式,我们可以过滤 EmailAddresses 字段并仅选择 SMTP 地址。运算符-clike
是区分大小写的like 运算符。
Get-EXOMailbox |
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={$_.EmailAddresses | Where-Object {$_ -clike "smtp:*"}}}
正如您在结果中看到的,别名包含前缀 smtp:
。在将结果导出到 csv 文件之前,我们也希望删除这些内容。 -join
运算符将多个别名连接在一起,并在它们之间使用逗号。
Get-EXOMailbox |
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={($_.EmailAddresses | Where-Object {$_ -clike "smtp:*"} |
ForEach-Object {$_ -replace "smtp:",""}) -join "," }}
如果你想将结果导出到excel,那么只需要在后面添加Export-Csv c:\path\filename.csv
即可:
Get-EXOMailbox |
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={($_.EmailAddresses | Where-Object {$_ -clike "smtp:*"} |
ForEach-Object {$_ -replace "smtp:",""}) -join "," }} |
Export-Csv c:\temp\emailaddresses.csv
返回超过 1000 个结果
默认情况下,结果限制为 1000 条记录。如果您的邮箱超过 1000 个,请在 Get-ExoMailbox
cmdlet 之后添加 -
ResultSize unlimited:
Get-EXOMailbox -ResultSize unlimited
在所有 Office 365 位置搜索电子邮件地址
我创建了一个小脚本,它将在所有三个位置中搜索电子邮件地址的使用情况。您还可以搜索电子邮件地址的一部分。结果将被输出,或者如果您愿意,可以使用 Export-CSV cmdlet 将结果导出为 CSV。
您可以从我的 Github 存储库下载完整的脚本。
param(
[Parameter(
Mandatory = $true,
HelpMessage = "Enter the Exchange Online or Global admin username"
)]
[string]$adminUPN,
[Parameter(
Mandatory = $true,
HelpMessage = "Emailaddress or part of it to find"
)]
[string]$emailAddress
)
Function ConnectTo-EXO {
<#
.SYNOPSIS
Connects to EXO when no connection exists. Checks for EXO v2 module
#>
process {
# Check if EXO is installed and connect if no connection exists
if ((Get-Module -ListAvailable -Name ExchangeOnlineManagement) -eq $null)
{
Write-Host "Exchange Online PowerShell v2 module is requied, do you want to install it?" -ForegroundColor Yellow
$install = Read-Host Do you want to install module? [Y] Yes [N] No
if($install -match "[yY]")
{
Write-Host "Installing Exchange Online PowerShell v2 module" -ForegroundColor Cyan
Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
}
else
{
Write-Error "Please install EXO v2 module."
}
}
if ((Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $null)
{
# Check if there is a active EXO sessions
$psSessions = Get-PSSession | Select-Object -Property State, Name
If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
Connect-ExchangeOnline -UserPrincipalName $adminUPN
}
}
else{
Write-Error "Please install EXO v2 module."
}
}
}
Function Search-Mailboxes {
<#
.SYNOPSIS
Search for email address in the mailboxes
#>
process {
Write-Host "Searching in mailboxes for $emailAddress" -ForegroundColor Cyan
Get-EXOMailbox -filter "EmailAddresses -like '*$emailAddress*'"
}
}
Function Search-Distributionlists {
<#
.SYNOPSIS
Search for email address in the distributionlists
#>
process {
Write-Host "Searching in distributionlists for $emailAddress" -ForegroundColor Cyan
Get-DistributionGroup -Filter "EmailAddresses -like '*$emailAddress*'"
}
}
Function Search-Groups {
<#
.SYNOPSIS
Search for email address in the mailboxes
#>
process {
Write-Host "Searching in groups for $emailAddress" -ForegroundColor Cyan
Get-UnifiedGroup -Filter "EmailAddresses -like '*$emailAddress*'"
}
}
Function Search-DynamicDistributionlists {
<#
.SYNOPSIS
Search for email address in the distributionlists
#>
process {
Write-Host "Searching in dynamic distributionlists for $emailAddress" -ForegroundColor Cyan
Get-DynamicDistributionGroup -Filter "EmailAddresses -like '*$emailAddress*'"
}
}
Function Find-EmailAddress{
<#
.SYNOPSIS
Get all AD users
#>
process {
$result = @()
$result += Search-Mailboxes
$result += Search-Distributionlists
$result += Search-Groups
$result += Search-DynamicDistributionlists
$result | ForEach {
[pscustomobject]@{
"DisplayName" = $_.DisplayName
"RecipientType" = $_.RecipientType
"Identity" = $_.identity
"EmailAddresses" = $_.EmailAddresses
}
}
}
}
# Connect to Exchange Online
ConnectTo-EXO
Find-EmailAddress | Sort-Object DisplayName
总结
我希望您觉得这篇文章有用。如果您有任何疑问,请在下面发表评论。您可能还喜欢以下相关文章:
- 使用 PowerShell 连接到 Exchange Online
- 使用 PowerShell 从 CSV 文件更新用户
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag