0

针对服务器运行检查

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 脚本,你能帮我解决这个问题吗,我创建了一个包含所有 servewith grop id 的表。

请求通过服务器帮助我完成循环并构建一个阵列,以便我可以运行 MAXMEMORY powershell 命令来使用所有服务器的组 ID 进行比较。

我已将所有服务器详细信息收集到表 dbo.server 组
中,powershell 脚本应使用 ID 遍历表并检查 ID 组中的服务器是否具有相同的 MAXMEMORY 配置 ID server_name Environment 1 ABC0123 prod
1 ABC5123 stage
1 ABC4123 DR
2 DEF0123 产品
2 DEF5123 阶段
2 DEF4123 DR
我正在尝试使用 powershell 脚本,它将根据 ID 检查和比较 MAXMEMORY 配置(检查相同 group_id 的 stage、prod、DR 服务器是否具有相似的设置),如果没有,则会显示警告/message 作为 group_ids 服务器未进行类似配置。请帮我写剧本

4

2 回答 2

0

如果您只想使用 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
于 2018-05-21T15:01:58.720 回答
0

你使这个脚本比它需要的更长。此外,您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;

您甚至可以在该 final 中创建一个计算列,Select-Object以告诉您配置和运行值是否不同。

于 2018-03-18T17:05:07.113 回答