Я использую базу данных SCCM (System Center Configuration Manager) для извлечения некоторой информации с помощью powershell, база данных содержит таблицу с именем CM_VRR, и в таблице содержится много информации, которая собирается с локальных компьютеров, а также сведения о сервере.

Я знаю, что получить данные с сервера SQL не так просто, если у вас есть студия управления sql, но в некоторых сценариях нам нужно очень часто собирать данные с сервера sql, чтобы предоставить ввод для чего-то еще или получить небольшую обновленную информацию. .

Если мы сможем использовать powershell для автоматического получения этой информации, это будет здорово, так как это сэкономит много нашего времени, а также нам не нужно устанавливать на нашей машине студию администратора sql или нам не нужно открывать консоль.

Ниже приведена информация о моем SQL-сервере.

SQL Server 2012:
Имя сервера: ADDC-2012
База данных: CM_VRR

Консоль SCCM 2012 (передняя часть)

QL-запрос — используется для получения информации о компьютере (сведения о коллекции устройств)

Теперь давайте начнем получать эти отчеты с помощью PowerShell!!!

Ниже приведены классы, которые мы используем для подключения SQL DB:

System.Data.SQLClient.SQLConnection : представляет собой открытое соединение с базой данных SQL Server.

System.Data.SqlClient.SqlCommand : представляет оператор Transact-SQL или хранимую процедуру для выполнения в базе данных SQL Server.

System.Data.SqlClient.SqlDataAdapter : представляет набор команд данных и подключение к базе данных, которые используются для заполнения набора данных и обновления базы данных SQL Server.

System.Data.DataSet: представляет кэш данных в памяти.

$Global:SCCMSQLSERVER = "ADDC-2012" 
$Global:DBNAME = "CM_VRR" 
Try 
{ 
$SQLConnection = New-Object System.Data.SQLClient.SQLConnection 
$SQLConnection.ConnectionString ="server=$SCCMSQLSERVER;database=$DBNAME;Integrated Security=True;" 
$SQLConnection.Open() 
} 
catch 
{ 
    [System.Windows.Forms.MessageBox]::Show("Failed to connect SQL Server:")  
} 
 
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand 
$SQLCommand.CommandText = "select QueryName,CollectionName from [dbo].[Collections_G] as G inner join [dbo].[Collection_Rules] as R 
 on G.CollectionID = R.CollectionID where G.CollectionName = 'softwareinstallation'" 
$SQLCommand.Connection = $SQLConnection 
 
$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SQLCommand                  
$SQLDataset = New-Object System.Data.DataSet 
$SqlAdapter.fill($SQLDataset) | out-null 
 
$tablevalue = @() 
foreach ($data in $SQLDataset.tables[0]) 
{ 
$tablevalue = $data[0] 
$tablevalue 
}  
$SQLConnection.close()

Ниже приведен вывод…

В соответствии с приведенным выше результатом мы получили два столбца с именем системы и именем коллекции на основе нашего запроса. Вы можете получить много столбцов в зависимости от того, какой запрос вы собираетесь использовать. Таким образом, мы должны отфильтровать данные на основе нашего требуемого столбца.

Фильтрация данных таблицы на основе столбца —последний цикл For-each в приведенном выше скрипте отфильтрует первый столбец ( $data[0] ) нашего набора данных.

Увеличьте значение массива с [0] до [1], чтобы получить значения следующего столбца.

через Microsoft