[玩转系统] PowerShell、管道和 Exchange 在线邮箱管理
作者:精品下载站 日期:2024-12-14 04:05:49 浏览:13 分类:玩电脑
PowerShell、管道和 Exchange 在线邮箱管理
管道化 cmdlet
使用 PowerShell,我们有许多 cmdlet 可以执行查询、配置更改等任务。 单个 cmdlet 本身很有用,但能够将信息从一个 cmdlet 提供给另一个 cmdlet 是 PowerShell 的一项非常有用的功能。 PowerShell 使用称为管道的概念来组合两个或多个 cmdlet 以执行内聚任务。管道字符“|”分隔 cmdlet。
在 cmdlet 之间创建管道时,信息从左侧的 cmdlet 传递到右侧的 cmdlet。 请记住,当信息从左向右传递时,PowerShell 将数据存储为对象以供下一个 cmdlet 处理,而不是存储为纯文本。使用对象意味着当管道中的下一个 cmdlet 处理它接收到的数据时,PowerShell 具有最大的灵活性。
实际使用
第一次使用 PowerShell 的人通常最终会使用单个 cmdlet 构建单行语句来查询信息,例如 Get-EXOMailbox 列出 Exchange Online 邮箱或使用 Set-EXOMailbox 更改设置。在这些 cmdlet 之间使用管道可以扩展我们的功能。尽管管道中 cmdlet 的数量没有限制,但请注意不要使其过于复杂,因为这可能会导致意想不到的后果。
这些示例演示如何以不同方式使用管道来列出启用存档的 Exchange Online 邮箱:
Get-EXOMailbox -PropertySets Minimum,Archive | Where ArchiveName -ne $Null
相同的示例,但使用另一个 Pipeline 按 DisplayName 属性添加排序:
Get-EXOMailbox -PropertySets Minimum,Archive | Where ArchiveName -ne $Null | Sort-Object DisplayName
采用前面的示例并添加其他管道来调整输出的格式:
Get-EXOMailbox -PropertySets Minimum,Archive | Where ArchiveName -ne $Null | Sort-Object DisplayName | ft -Auto
使用 cmdlet 来正确处理信息存在一定的操作顺序。 例如,格式化 cmdlet(Ft、Fl、Fw)应添加到管道的末尾。如果没有,PowerShell 会生成错误:
"out-lineoutput : The object of type "Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData" is not valid or not in the correct sequence."
不要尝试在管道中间格式化输出:
Get-EXOMailbox -PropertySets Minimum,Retention | Ft DisplayName,Retention* | Sort-Object DisplayName
执行(在最后格式化):
Get-EXOMailbox -PropertySets Minimum,Retention | Sort-Object DisplayName | Ft DisplayName,Retention*
兼容的 Cmdlet
并非所有 PowerShell cmdlet 都可以通过管道将信息从一个 cmdlet 传输到另一个 cmdlet,这通常是因为一个 cmdlet 生成的对象无法由管道中的下一个 cmdlet 处理。 例如,我们无法将对象从 Get-EXOMailbox Cmdlet 管道传输到 Get-Remote Domain cmdlet,因为第二个 cmdlet 将尝试将邮箱标识作为远程域进行处理,因此会失败。
另一方面,处理类似对象(例如 Get-EXOMailbox 和 Get-MailboxSpellingConfiguration)的 cmdlet 可以在它们之间传输数据,因为第二个 cmdlet 可以接受要处理的邮箱标识。
了解哪些 cmdlet 可以协同工作需要一些经验。从逻辑上讲,我们需要先了解一个 cmdlet 接受的输入内容,然后再从另一个 cmdlet 传递信息。
$_ 管道变量
管道支持特殊的 $_ 变量来标识 PowerShell 正在处理的当前对象。 我们可以通过添加“.”和我们想要的属性(例如 DisplayName 或 Identity)来使用该对象并使用其属性。
$_ 变量的常见用法是引用正在查询的对象的某个属性,并过滤与该属性匹配的所有对象。 这可以在单行以及 Foreach 循环中完成:
在此示例中,我们查找过去 14 天内更新的邮箱:
$Date = (Get-Date).AddDays(-14)
Get-EXOMailbox -InactiveMailboxOnly | Where {$_.WhenChanged -lt $Date} | Ft
我们还可以使用 $_ 变量来执行其他常见任务。在此示例中,我们搜索位于美国且已分配保留策略的邮箱:
Get-EXOMailbox -PropertySets All | Where {$_.RetentionPolicy -ne $Null} | Where {$_.UsageLocation -eq 'United States'} | Ft DisplayName,PrimarySMTPAddress,RetentionPolicy -Auto
来自美国的所有非活动邮箱列表,按上次更改日期和输出格式排序:
Get-EXOMailbox -InactiveMailboxOnly -PropertySets All | Where {$_.UsageLocation -eq 'United States'} | Sort-Object WhenChanged | Ft DisplayName, WhenCreated, WhenChanged
此示例公开了存储在位于美国的所有邮箱中的可恢复项目。 Foreach-Object 用于将邮箱 GUID 转换为显示名称,以获得更好的输出可读性:
Get-EXOMailbox -Properties UsageLocation | Where {$_.UsageLocation -eq 'United States'} | Get-ExOMailboxFolderStatistics -FolderScope RecoverableItems | Select-Object ContentMailboxGuid, FolderAndSubfolderSize, ItemsInFolderAndSubfolders | ForEach-Object { $Mailbox = $_.ContentMailboxGuid; $Name = (Get-ExOMailbox $Mailbox).DisplayName;$_.ContentMailboxGuid = $Name ; Return $_}
现实世界的例子
Foreach 循环是我们利用 $_ 特殊变量来操作数据的另一种方式。
收集邮箱数据时,一项常见任务是检查电子邮件地址以确保 Exchange Online 数据正确。 例如,当用户对象同步到 Azure AD 并且最终用户的 onmicrosoft.com 电子邮件地址创建不正确或未按预期创建时,可能会出现对象冲突或别名不正确。 列出 EmailAddresses 属性会显示前缀为“SIP:”或“SMTP:”或“smtp:”的代理电子邮件地址。 我们可以使用 $_ 删除借口以仅显示电子邮件地址:
Get-ExOMailbox | Select-Object DisplayName,RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress in $EmailAddresses) { $Email = $EmailAddress.split(':')[1]; $TrimmedEmails += $Email}; $_.EmailAddresses = $TrimmedEmails;Return $_}
经过一些更改,我们可以使用代码创建 SMTP、SIP 和 SharePoint Online 代理地址列表:
仅限 SMTP
Get-ExOMailbox | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress in $EmailAddresses) { if ($EmailAddress -like 'smtp*') { $Email = $EmailAddress.split(':')[1]; $TrimmedEmails += $Email}}; $_.EmailAddresses = $TrimmedEmails;Return $_}
仅限 SIP
SIP 地址用于 Teams 通信,包括电话(图 2:)
Get-ExOMailbox | Select-Object DisplayName, RecipientTypeDetails,EmailAddresses | Foreach-Object { $EmailAddresses = $_.EmailAddresses;$TrimmedEmails = @();Foreach ($EmailAddress in $EmailAddresses) { if ($EmailAddress -like 'sip*') { $Email = $EmailAddress.split(':')[1]; $TrimmedEmails += $Email}}; $_.EmailAddresses = $TrimmedEmails;Return $_}
在数据格式化的最后,请注意“Return $_”的用法,它允许将重新格式化的数据按字面量返回到管道中的对象。 在我们的示例中,我们仅返回格式化的代理地址,而不是邮箱对象的 EmailAddresses 属性中保存的值。
导出-CSV
PowerShell 管道可以将输出格式化为文件以用于报告目的。例如,我们可以创建来自美国的所有非活动邮箱的列表,按上次更改日期和输出格式排序:
Get-EXOMailbox -InactiveMailboxOnly -PropertySets All | Where UsageLocation -eq 'United States' | Sort-Object WhenChanged | Select-Object DisplayName,WhenCreated,WhenChanged | Export-CSV c:\reports\InactiveUSMailboxes.csv -NoType
Out-GridView
我们还可以通过管道输出到 Out-GridView cmdlet 以在弹出窗口中查看数据:
Get-EXOMailBox | Out-GridView
Out-GridView 的一个有用功能是使用 PassThru 开关,该开关允许操作员选择值并仅将这些值传递回 PowerShell,以便管道中的下一个 cmdlet 进一步处理。
Get-EXOMailbox | Out-GridView -PassThru | Get-EXOCasMailbox | Ft DisplayName,*Enabled
单击弹出框中的“确定”会将选定的邮箱传递给 Get-EXOCasMailbox 进行处理,以显示允许邮箱连接的属性:
结论
PowerShell 管道将非常有用的 cmdlet 组合在一起来处理数据。如果使用得当,管道是通过一系列步骤处理数据以自动执行常见管理操作的好方法。掌握管道,或者至少熟悉管道 cmdlet,是使用 PowerShell 管理 Microsoft 365 租户的任何人的一项基本技能。
猜你还喜欢
- 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