Saya menggunakan database SCCM (System Center Configuration Manager) untuk menarik beberapa informasi menggunakan PowerShell, database berisi tabel bernama CM_VRR dan tabel tersebut menyimpan banyak informasi yang dikumpulkan dari mesin lokal serta detail server.

Saya tahu mendapatkan data dari server SQL tidak semudah itu jika Anda memiliki studio manajemen sql, tetapi dalam beberapa skenario kita perlu mengumpulkan data sangat sering dari server sql untuk memberikan masukan untuk hal lain, atau mendapatkan sedikit informasi terkini .

Jika kita dapat menggunakan PowerShell untuk mendapatkan informasi tersebut secara otomatis, itu akan sangat bagus karena menghemat banyak waktu kita, dan kita juga tidak perlu menginstal studio admin sql di mesin kita. Atau kita tidak perlu membuka konsol.

Di bawah ini adalah informasi server SQL saya.

SQL Server 2012 :
Nama Server : ADDC-2012
Basis Data : CM_VRR

Konsol SCCM 2012 (Depan)

QL Query — Digunakan untuk mendapatkan Informasi Komputer (Rincian Pengumpulan Perangkat)

Sekarang mari kita mulai mendapatkan laporan ini menggunakan PowerShell!!!

Di bawah ini adalah kelas yang kami gunakan untuk menghubungkan SQL DB:

System.Data.SQLClient.SQLConnection : Ini Mewakili koneksi terbuka ke database SQL Server

System.Data.SqlClient.SqlCommand : Mewakili pernyataan Transact-SQL atau prosedur tersimpan untuk dijalankan terhadap database SQL Server

System.Data.SqlClient.SqlDataAdapter : Mewakili sekumpulan perintah data dan koneksi database yang digunakan untuk mengisi kumpulan data dan memperbarui database SQL Server

System.Data.DataSet: Mewakili cache data dalam memori.

$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()

Di bawah ini adalah keluarannya…

Sesuai hasil di atas, kami mendapatkan dua kolom dengan Nama Sistem dan Nama Koleksi berdasarkan kueri kami. Anda mungkin mendapatkan banyak kolom berdasarkan kueri yang akan Anda gunakan. Jadi kita harus memfilter data berdasarkan kolom yang kita butuhkan.

Memfilter data tabel berdasarkan kolom —Last For-each loop dalam skrip di atas akan memfilter kolom pertama ( $data[0] ) dari kumpulan data kita.

Tingkatkan nilai array dari [0] menjadi [1] untuk mendapatkan nilai kolom berikutnya.

melalui Microsoft