Скрипты Powershell для dbachecks для сравнения MaxMemory сервера, указанного в таблице
Выполнить проверки на серверах
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-серверы в таблице согласно группам), Теперь я хочу сравнить серверы с идентификаторами групп, чтобы проверить, есть ли серверы (stage,prod, DR) с одинаковыми идентификаторами групп. То же самое MAXMemory кофигурация или нет.
Для этого я использую приведенный ниже скрипт powershell. Можете ли вы помочь мне с этим, я создал таблицу со всем идентификатором обслуживания с grop.
Пожалуйста, помогите мне с циклом по серверам и создайте массив, чтобы я мог запустить команду powershell MAXMEMORY, чтобы сравнить ее, используя идентификатор группы для всех серверов.
Я собрал все детали серверов в таблицу dbo.server groups
сценарий powershell должен выполнить итерацию по таблице с помощью идентификатора и проверить, имеют ли серверы в группе идентификаторов одинаковый идентификатор конфигурации MAXMEMORY имя_сервера Environment 1 ABC0123 prod
1 этап ABC5123
1 ABC4123 DR
2 DEF0123 Prod
2 этап DEF5123
2 DEF4123 DR
Я пытаюсь использовать скрипт powershell, который будет проверять и сравнивать конфигурацию MAXMEMORY по идентификатору (чтобы проверить, имеют ли этап, prod, DR-сервер одного и того же group_id одинаковые настройки или нет), если нет, то он отобразит предупреждение / сообщение как серверы group_ids не настроены аналогично. Пожалуйста, помогите мне со сценарием
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
Вы делаете этот сценарий дольше, чем нужно. Кроме того, вы используете 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
чтобы сказать вам, если настроенные и текущие значения отличаются.