对服务器运行检查
Import-Module dbatools
Import-Module dbachecks
$Server = "AMCB123"
$Database = "DBA"
# Create recordset of servers to evaluate
$sconn = new-object System.Data.SqlClient.SqlConnection("server=$Server;Trusted_Connection=true");
$q = "SELECT DISTINCT servername FROM DBA.[dbo].[Server_Group] WHERE ID =1;"
$sconn.Open()
$cmd = new-object System.Data.SqlClient.SqlCommand ($q, $sconn);
$cmd.CommandTimeout = 0;
$dr = $cmd.ExecuteReader();
# Loop through the servers and build an array
while ($dr.Read()) {
Get-DbaMaxMemory -SqlServer $dr.GetValue(0) | Format-Table
}
$dr.Close()
$sconn.Close()
我已经列出了sql服务器(阶段,生产,DR服务器按组在表中),现在我想比较具有组ID的服务器,以检查具有相同组ID的服务器(阶段,生产,DR)是否具有相同的MAXMemory配置。
为此,我正在使用下面的powershell脚本,您能否帮助我解决这个问题,我已经创建了一个包含所有服务与grop id的表。
请求帮助我循环运行服务器并构建一个数组,以便我可以运行 MAXMEMORY powershell 命令以使用所有服务器的组 ID 进行比较。
我已将所有服务器详细信息收集到一个表中 dbo.server 组
powershell 脚本应使用 ID 循环访问该表,并检查 ID 组中的服务器是否具有相同的 MAXMEMORY 配置 ID server_name环境 1 ABC0123产品
1 ABC5123阶段
1 ABC4123 DR
2 DEF0123产品
2 DEF5123阶段
2 DEF4123 DR
我正在尝试使用 powershell 脚本,它将根据 ID 检查和比较 MAXMEMORY 配置(以检查同一group_id的阶段、生产、DR 服务器是否具有相似的设置),如果没有,那么它将显示警告/消息group_ids因为服务器配置不同。 请帮我写脚本
你使这个脚本比它需要的更长。此外,您过早地使用了Format-Table
- 您应该只使用Format-*
函数向用户显示最终信息;它们输出字符串,而不是可以在下线使用的正确类型的数据/变量。
使用 PowerShell 和 dbatools 提供的工具获取服务器列表,然后将该列表作为集合传递给Get-DbaMaxMemory
。
import-module dbatools
$ServerList = Invoke-DbaSqlQuery -ServerInstance $Server -query "select distinct servername from dba.dbo.server_group where group_id = 1" | Select-Object -ExpandProperty servername;
Get-DbaMaxMemory -ServerInstance $ServerList | Select-Object SqlInstance, SqlMaxMB;
这将为您提供 SQL 实例及其配置为使用的内存的列表。之后你做什么...很难说,因为您还没有明确定义要查找的内容。
但这可能无法说明全部情况。检查配置的值以及您当前正在运行的内容不是更好吗?你可以做到这一点Get-DbaSpConfigure
.
import-module dbatools
$ServerList = Invoke-DbaSqlQuery -ServerInstance $Server -query "select distinct servername from dba.dbo.server_group where group_id = 1" | Select-Object -ExpandProperty servername;
Get-DbaSpConfigure -ServerInstance $ServerList | Select-Object ServerName,ConfiguredValue,RunningValue;
您甚至可以在该最终Select-Object
中创建一个计算列,以告诉您配置的值和运行值是否不同。
如果你只想使用 dbachecks(在后台使用 dbatools),你可以使用
$ServerList = (Invoke-DbaSqlQuery -ServerInstance $Server -query "select distinct servername from dba.dbo.server_group where group_id = 1").servername
和
Invoke-DbcCheck -SQlInstance $ServerList -Check MaxMemory
或者,您可以使用以下命令将配置项 app.computername 和 app.sqlinstance 设置为服务器列表
Set-DbcConfig -Name app.sqlinstance -Value $serverlist
Set-DbcConfig -Name app.computername -Value $serverlist
然后您可以使用以下命令运行此检查(或任何其他检查)
Invoke-DbcCheck -Check MaxMemory