【问题标题】:Powershell script scripts on dbachecks to compare the MaxMemory of server listed in a tabledbachecks 上的 Powershell 脚本脚本,用于比较表中列出的服务器的 MaxMemory
【发布时间】:2018-08-27 06:03:46
【问题描述】:

对服务器运行检查

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 服务器(stage、prod、DR 服务器) id 是否具有相同的 MAXMemory 配置。

为此,我正在使用下面的 powershell 脚本,你能帮我解决这个问题吗,我已经创建了一个包含所有 servewith grop id 的表。

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

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

【问题讨论】:

    标签: sql-server powershell powershell-3.0 dbatools


    【解决方案1】:

    你使这个脚本比它需要的更长。此外,您过早地使用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 中创建一个计算列,以告诉您配置和运行的值是否不同。

    【讨论】:

    • 非常感谢您的回复。我已经编辑并提供了其他信息,请您帮助我处理 powershell 脚本。
    • 我不会为你做所有的事情。 Stack Overflow 不是代码编写服务。在此处获取获取基础数据的固定版本并尝试自己解决。
    【解决方案2】:

    如果您只想使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多