[玩转系统] 使用 PowerShell 记录 Exchange Server
作者:精品下载站 日期:2024-12-14 08:11:39 浏览:13 分类:玩电脑
使用 PowerShell 记录 Exchange Server
记录工作(或非工作?)环境是一项重要任务,通常由管理员和顾问承担,以便更好地了解为该环境配置的内容,Exchange Server 201x 也不例外。正确的维护、迁移和业务连续性活动在很大程度上取决于此文档,并且尽可能准确地了解配置内容将有助于完成这些活动/任务。那么我们如何记录 Exchange Server 环境呢?获取 cmdlet 和导出文件(txt、csv 和 HTML)的组合将允许我们创建适当的环境文档。
警告: 本文不会介绍如何记录 Exchange 中的每一项,因为移动部件太多。不过,本文将集中讨论需要记录的一些最重要的方面。
构建框架
在深入研究文档 cmdlet 之前,我们需要构建框架来捕获这些数据,这将包括创建或定义输出文件以及我们需要的其他变量。首先,我们的 cmdlet 的某些输出可能很宽,非常宽。因此,我们可能需要调整窗口的缓冲区大小,这样我们就不会错过任何细节。
使用此单行代码设置 PowerShell 窗口缓冲区大小以允许宽输出:
$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (500, 9999)
接下来,我们需要定义主要输出目标文件和文件路径:
$Path = (Get-Item -Path ".\" -Verbose).FullName$File = "ExchangeServerInformation.Txt"$Destination = $Path+"\"+$File
Exchange Server 包含可以使用 PowerShell 查询的各种数据和配置信息,并且根据环境的大小,您可能需要创建其他文件来帮助分隔这些数据。例如,具有 100 个邮箱的环境可能能够将所有设置和数据导出到单个文件,因为这样很容易使用,但是,具有 10,000 多个邮箱的环境会发现这相当具有限制性,并且可能希望定义以下文件:每个单独的组件。下面显示了一些示例日志文件(在运行 Get cmdlet 之前预定义):
有关用户邮箱的示例数据收集:
$ArchiveMailboxDestination = $Path+"\ArchiveMailboxStatistics.txt"$CASMailboxDestination = $Path+"\CASMailboxProperties.csv"$MailboxStatDestination = $Path+"\MailboxStatistics.txt"
服务器配置文件示例:
$ExchangeDatabaseDestination = $Path+"\ExchangeDatabaseInformation-Detailed.txt"$NICInfoCSVDestination = $Path+"\ExchangeServerNICConfiguration.csv"
上面的列表并不完整,但却是您开始构建自己的脚本的良好起点。
探索和导出配置数据
Exchange 是一个复杂的系统,但它可以分解为多个组件,以便采用更有组织的方法来收集数据。将其分解为多个块确实需要对 Exchange 有一些广泛的了解,然后需要对后端 PowerShell cmdlet 的了解,这将有助于发现数据并提供用于报告目的的报告。让我们将 Exchange 环境分解为多个工作部分并创建一些示例文档。
样本细分
Exchange 服务器设置: 服务器数量、版本、补丁级别、数据库、URL
Windows服务器配置:硬件或资源 (VM)、页面文件、事件日志、版本、磁盘大小
用户邮箱:邮箱统计、存档邮箱统计信息、允许的协议和邮件联系人
Exchange 软件设置: 电子邮件地址策略、通讯簿策略、身份验证策略、接收连接器、发送连接器、 DLP 政策等
注意:了解您的环境。如果有超过一千个,请确保使用“-ResultSize Unlimited”,因为它已经过时了。
Exchange 服务器设置
首先,我们来探讨一下 Exchange Server 本身的配置。
版本、版本、角色和站点
$ExchangeServers = Get-ExchangeServer$LocalExchangeServer = $Env:ComputerName$ServerVersionCheck = $TrueForeach ($ExchangeServer in $ExchangeServers) {$Server = $ExchangeServer.Name$Site = $ExchangeServer.Site$ServerRole = $ExchangeServer.ServerRole$Edition = $ExchangeServer.EditionIf ($Server -ne $LocalExchangeServer) {$Version = Invoke-Command -ComputerName $Server -ScriptBlock {$Ver = Get-Command Exsetup.exe | ForEach-Object {$_.FileversionInfo};$Version = $Ver.FileVersion;$Version} -ErrorAction Stop} Else {$Ver = Get-Command Exsetup.exe | ForEach-Object {$_.FileversionInfo}$Version = $Ver.FileVersion}$Line = "$Server|"+"$Version|"+"$Edition|"+"$ServerRole|"+"$Site" | Out-file $Destination -Append}
脚本的结果如下所示:
对于验证服务器版本以及服务器上安装的角色很有用。
邮箱数据库
接下来,我们将从 Exchange 数据库中提取一些基本信息:
Get-MailboxDatabase | FT Name, Server, Recovery, ReplicationType, LogFolderPath, EdbFilePath, DeletedItemRetention, MailboxRetention -Auto | Out-file $Destination -Append
示例输出:
网址
对于客户端连接和外部进程来说,为 Exchange 服务器提供正确的 URL 配置非常重要,并且可以为最终用户带来更好的体验。以下代码块查询每个 URL 类型并将结果导出到文件。
$Line = Get-OWAVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-WebServicesVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-ActiveSyncVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-AutoDiscoverVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-MAPIVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-OABVirtualDirectory -ADPropertiesOnly |ft Server,*lurl* -Auto | Out-file $Destination -Append$Line = Get-ClientAccessService | ft Name,*uri* -Auto | Out-file $Destination -Append
Windows 服务器配置
硬件或资源 (VM)、页面文件、事件日志、操作系统版本
Exchange 服务器的另一个重要部分是其运行的底层 Windows Server 的配置。
处理器核心 - 逻辑和物理
接下来,检查逻辑和物理处理器的数量。这可用于文档记录,以及验证是否未使用超线程。
$Processors = Get-WMIObject Win32_Processor -ComputerName $Server$LogicalCPU = ($Processors | Measure-Object -Property NumberOfLogicalProcessors -sum).Sum$PhysicalCPU = ($Processors | Measure-Object -Property NumberOfCores -sum).Sum
服务器内存
$RamInGb = (Get-wmiobject -ComputerName $Server -Classname win32_physicalmemory -ErrorAction Stop | measure-object -property capacity -sum).sum/1GB
页面文件配置
检查是否有Pagefile,如果有,检查最小和最大大小。如果页面文件查询返回空,则页面文件被管理。
$PageFileCheck = Get-CIMInstance -ComputerName $Server -Class WIN32_PageFile -ErrorAction STOP$Managed = $FalseIf ($Null -ne $PageFileCheck) {$MaximumSize = (Get-CimInstance -ComputerName $Server -Query "Select * from win32_PageFileSetting" | select-object MaximumSize).MaximumSize$InitialSize = (Get-CimInstance -ComputerName $Server -Query "Select * from win32_PageFileSetting" | select-object InitialSize ).InitialSize} Else {$Managed = $True}
事件日志
$Line = EventLog -list | where {($_.log -eq 'Application') -or ($_.log -eq 'system') -or ($_.log -eq 'Security')} |ft Log,MAx*,Over* -auto | Out-File $EventLogConfiguration
Windows 操作系统信息
$OSName = ($os = Get-WmiObject Win32_OperatingSystem -Namespace "root\CIMV2").Name.split('|')[0]
用户邮箱/联系人
Exchange Server 环境的一个重要方面是由邮件对象(如联系人和邮箱)组成。查询邮箱号码、大小、存档信息等非常有用,因为它可以为支持人员提供规模感。它还可以帮助开发正确的支持系统以进行维护、备份、迁移等。
邮箱统计
首先,对于用户邮箱统计,我们有一个定义的文件来将信息导出到其中。然后我们可以单独导出该文件,因为文件可能会变得非常大(想想 10,000 多个用户环境)。
$MailboxStatDestination = $Path+"\MailboxStatistics.txt"Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select-Object DisplayName, @{expression = { $_.TotalItemSize.Value.ToMB()};label="Mailbox Size(MB)"} | ft -auto | Out-File $MailboxStatDestination
存档邮箱统计
接下来,对于用户的存档邮箱,我们执行相同的代码集,但使用 Get-Mailbox 的 -Archive 开关,以便我们可以查询所有用户的存档邮箱:
$ArchiveMailboxDestination = $Path+"\ArchiveMailboxStatistics.txt"Get-Mailbox -ResultSize Unlimited -Archive | Get-MailboxStatistics | Select-Object DisplayName, @{expression = { $_.TotalItemSize.Value.ToMB()};label="Mailbox Size(MB)"} | ft -auto | Out-File $ArchiveMailboxDestination
允许的协议
然后,对于用户可用于其邮箱的协议,我们使用 Get-CASMailbox cmdlet 并将其导出到我们预定义的结果文件中:
$CasMailboxDestination = CASMailboxProperties.txtGet-CasMailbox | ft -auto | Out-File $CasMailboxDestination
邮件联系方式
$MailContactsDestination = ‘MailContacts.txt’$Line = Get-MailContact -ResultSize Unlimited | Ft DisplayName, Alias, EmailAddress, HiddenFromAddressListsEnabled -Auto | Out-File $MailContactsDestination
交换软件设置
除了基本的 Exchange Server 设置之外,我们还可以在 Exchange Server 软件中配置自定义设置。以下是我们可以使用 PowerShell 查询的一些配置示例:
电子邮件地址政策
$Line = Get-EmailAddressPolicy -ErrorAction STOP | Ft Name, RecipientFilterType, Priority ,Enabled*, RecipientFilter, LDAP*, IsValid -Auto | Out-File $Destination -Append
地址簿政策
$Line = Get-AddressBookPolicy | Fl | Out-File $Destination -Append
认证策略
$Line = Get-AuthenticationPolicy -ErrorAction STOP | Fl Name,Identity,allow* | Out-file $Destination -Append
接收连接器
$Line = Get-ReceiveConnector | Ft Identity, Bindings, EnabledAuthMechanism, MaxMessageSize, PermissionGroups, RequireTLS, TransportRole -Auto | Out-file $Destination -Append
发送连接器
$Line = Get-SendConnector -ErrorAction STOP | Ft Identity, HomeMtaServerId, Enabled, MaxMessageSize, AddressSpaces, CloudServicesMailEnabled, RequireTLS, SmartHosts -Auto | Out-file $Destination -Append
DLP 政策
$Line = Get-DLPPolicy | Ft Name,State,Mode,Identity -Auto | Out-File $Destination -Append
创建报告
我们收集的一些数据可以更好地表示或作为 HTML 报告提供给其他人,因为数据可以以更易于使用的方式表示。也许该报告将由需要向业务流程的内部/外部来源提供审核信息或高级架构信息的 IT 管理人员使用。使用PowerShell,我们可以将常规CSV输出文件查询的信息转换为HTML文件。执行此操作有很多选项,本文不会提供该过程的深入方法,但是我们将介绍可在报告创建过程中使用的高级方法。
在此报告中,我们将查询所有 Exchange 服务器的 NIC 信息,这样做是为了确保没有服务器配置 DHCP、网关过多或其他 NIC 配置问题。
$ExchangeServers = (Get-ExchangeServer).NameForeach ($ExchangeServer in $ExchangeServers) {$Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ExchangeServer -EA Stop | ? {$_.IPEnabled}Foreach ($Network in $Networks) {$IPAddress = $Network.IpAddress[0]$SubnetMask = $Network.IPSubnet[0]$DefaultGateway = $Network.DefaultIPGateway$DNSServers = $Network.DNSServerSearchOrder$WINS1 = $Network.WINSPrimaryServer$WINS2 = $Network.WINSSecondaryServer $WINS = @($WINS1,$WINS2) $IsDHCPEnabled = $falseIf($network.DHCPEnabled) {$IsDHCPEnabled = $true}$MACAddress = $Network.MACAddress$OutputObj = New-Object -Type PSObject$OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.ToUpper()$OutputObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPAddress$OutputObj | Add-Member -MemberType NoteProperty -Name SubnetMask -Value $SubnetMask$OutputObj | Add-Member -MemberType NoteProperty -Name Gateway -Value ($DefaultGateway -join ",") $OutputObj | Add-Member -MemberType NoteProperty -Name IsDHCPEnabled -Value $IsDHCPEnabled$OutputObj | Add-Member -MemberType NoteProperty -Name DNSServers -Value ($DNSServers -join ",") $OutputObj | FT -auto$Row = "$Computer," + "$IPAddress," +"$SubnetMask," +"$DefaultGateway," +"$ISDHCPEnabled," + "$DNSServers"Add-Content -Path $NICInfoCSVDestination $Row}
一旦我们将所有信息收集到由 $NICInfoCSVDestination 变量定义的 CSV 文件中,我们就可以开始为我们的文件创建 HTML 标头:
# Define Style for HTML file$OutputFile = "<style>"$OutputFile = $OutputFile + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"$OutputFile = $OutputFile + "TH{border-width: 1px;padding: 2px;border-style: solid;border-color: black;}"$OutputFile = $OutputFile + "TD{border-width: 1px;padding: 2px;border-style: solid;border-color: black;}"$OutputFile = $OutputFile + "</style>"
然后转换 $NICInfoCSVDestination 文件并应用我们之前定义的标头:
# Convert CSV to HTML$Output = Import-Csv -Path $NICInfoCSVDestination$Output | ConvertTo-Html -Head $OutputFile | Set-Content -Path $NICInforHTMLDestination
运行此代码部分时,我们应该有一个如下所示的 HTML 文件:
我们在上面看到的又是 Exchange Server 网络配置的摘要列表,它可以对配置进行高级审查并帮助发现错误配置。
结论
好吧,您已经通过了 PowerShell 代码片段的攻击,恭喜您!现在希望您看到了片段的价值以及快速轻松的构建,并且可以开始了解这对您的环境有何价值。请记住,本文并不全面,我们也无法在博客文章中真正重新创建整个脚本。我编写的一个脚本超过 5,000 行,用于记录 Exchange Server。对于后续步骤,请阅读并重新阅读这篇文章,拆开代码,然后将其扩展到您可能需要记录的配置的其他部分。然后创建一组适当的输出文件。最后,确保评估文档的读者和消费者并向他们评估。导出可以是超级技术性的,几乎不需要任何额外的解释,或者脚本可以执行翻译,其中可能可以关联阈值并报告经理级别的报告。要记住的事情。最后,你用它做什么取决于你,读者,这就是 PowerShell 的自由。
相关内容
简介:HTML 结果消息和可定制的 HTML 报告
猜你还喜欢
- 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