Я написал скрипт powershell для запроса базы данных, чтобы получить список имен серверов.Затем я сохраняю результаты в переменной, чтобы пройти через каждый сервер для поиска службы, выполнив что-то вроде: foreach ($server in $servers)
.У меня нет проблем с сохранением результатов в переменной, но когда я делаю оператор foreach, он не позволяет мне получить имя сервера 1 на 1 должным образом.
Если я вручную введу имена серверов, например $servers = (server, server2,server3)
, то forEach
будет работать.Как правильно это сделать?
Обновлено: ниже приведен скрипт
$SQLServer= 'sourceServer'
$Database = 'DatabaseNameHere'
Создание функции SQL-запроса
Function SQL_Query ($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString =
"Server=$SQLServer;Database=$Database;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandText = $Query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
}
Использование этой функции
$list=SQL_Query "Select ServerName From Server_Inventory Where Status = 'A' "
Проверить возвращенный список серверов
$list
Я бы хотел пройти через каждый сервер и посмотреть, какие серверы установлены на каждом сервере
$output= Foreach ($server in $list) {
$output=Get-DbaSqlService -ComputerName $server | Where-Object
{$_.ServiceType -in ('SSIS','Agent','Engine','SSRS','FullText')}
}
$output | Out-GridView -Title "View all SQL Services"