Я использую базу данных 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