当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 记录 Exchange Server

作者:精品下载站 日期:2024-12-14 08:11:39 浏览:13 分类:玩电脑

使用 PowerShell 记录 Exchange Server


[玩转系统] 使用 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}


脚本的结果如下所示:

[玩转系统] 使用 PowerShell 记录 Exchange Server

对于验证服务器版本以及服务器上安装的角色很有用。

邮箱数据库

接下来,我们将从 Exchange 数据库中提取一些基本信息:

Get-MailboxDatabase | FT Name, Server, Recovery, ReplicationType, LogFolderPath, EdbFilePath, DeletedItemRetention, MailboxRetention -Auto | Out-file $Destination -Append

示例输出:

[玩转系统] 使用 PowerShell 记录 Exchange Server

网址

对于客户端连接和外部进程来说,为 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 文件:

[玩转系统] 使用 PowerShell 记录 Exchange Server

我们在上面看到的又是 Exchange Server 网络配置的摘要列表,它可以对配置进行高级审查并帮助发现错误配置。

结论

好吧,您已经通过了 PowerShell 代码片段的攻击,恭喜您!现在希望您看到了片段的价值以及快速轻松的构建,并且可以开始了解这对您的环境有何价值。请记住,本文并不全面,我们也无法在博客文章中真正重新创建整个脚本。我编写的一个脚本超过 5,000 行,用于记录 Exchange Server。对于后续步骤,请阅读并重新阅读这篇文章,拆开代码,然后将其扩展到您可能需要记录的配置的其他部分。然后创建一组适当的输出文件。最后,确保评估文档的读者和消费者并向他们评估。导出可以是超级技术性的,几乎不需要任何额外的解释,或者脚本可以执行翻译,其中可能可以关联阈值并报告经理级别的报告。要记住的事情。最后,你用它做什么取决于你,读者,这就是 PowerShell 的自由。


相关内容

简介:HTML 结果消息和可定制的 HTML 报告

[玩转系统] 使用 PowerShell 记录 Exchange Server

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯