You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写基于dbachecks的PowerShell脚本对比指定表中服务器MaxMemory

基于dbachecks与dbatools的SQL Server MaxMemory对比脚本实现

我帮你把这个脚本补全并整理好了,正好实现从AMCB123实例的DBA数据库里取出指定分组的服务器,然后用dbachecks和dbatools来对比它们的MaxMemory配置。下面是完整的实现方案:

完整脚本代码

# 导入SQL运维必备模块
Import-Module dbatools
Import-Module dbachecks

# 定义中心数据库的连接信息
$centralServer = "AMCB123"
$centralDb = "DBA"

# 从中心数据库的Server_Group表(ID=1)读取目标服务器列表
$sconn = New-Object System.Data.SqlClient.SqlConnection("server=$centralServer;Trusted_Connection=true")
$query = "SELECT DISTINCT servername FROM DBA.[dbo].[Server_Group] WHERE ID = 1;"
$sconn.Open()
$cmd = New-Object System.Data.SqlClient.SqlCommand($query, $sconn)
$cmd.CommandTimeout = 0  # 取消查询超时限制,避免大列表读取失败
$dr = $cmd.ExecuteReader()

# 将读取到的服务器名存入数组,方便后续批量处理
$targetServers = @()
while ($dr.Read()) {
    $targetServers += $dr["servername"].ToString().Trim()
}
$sconn.Close()

# ---------- 方式1:快速执行MaxMemory合规性检查 ----------
Write-Host "=== 开始执行MaxMemory合规性检查 ===" -ForegroundColor Cyan
# 调用dbachecks的内置规则,基于最佳实践检查每台服务器的MaxMemory配置
Invoke-DbcCheck -Check MaxMemory -SqlInstance $targetServers -Show Summary

# ---------- 方式2:获取详细配置值做对比分析 ----------
Write-Host "`n=== 获取所有服务器的MaxMemory具体配置详情 ===" -ForegroundColor Cyan
# 用dbatools获取每台服务器的MaxMemory相关数值
$maxMemoryResults = Get-DbaMaxMemory -SqlInstance $targetServers

# 格式化输出对比表格,包含当前配置、总内存、推荐值和合规状态
$maxMemoryResults | Select-Object SqlInstance, SqlMaxMB, TotalMB, RecommendedMB, Status | Format-Table -AutoSize

关键细节说明

  • 服务器列表获取:用原生SqlClient直接连接中心数据库,确保精准提取Server_Group表中ID=1的所有服务器,避免重复或遗漏
  • 两种对比方式:
    • 合规性检查:Invoke-DbcCheck会基于微软最佳实践规则,直接给出每台服务器的MaxMemory配置是否合规,适合快速审计整个服务器组的配置状态
    • 数值对比:Get-DbaMaxMemory返回更详细的数值,包括当前配置的MaxMemory(MB)、服务器总内存、推荐的最优值以及状态,方便你逐台分析差异
  • 稳定性优化:设置CommandTimeout = 0避免读取大服务器列表时超时,同时用Trim()处理服务器名,避免因空格导致的连接失败

内容的提问来源于stack exchange,提问作者smd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:39:05