ฉันใช้ฐานข้อมูล SCCM (ตัวจัดการการกำหนดค่าศูนย์ระบบ) เพื่อดึงข้อมูลบางอย่างโดยใช้ 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()

ด้านล่างเป็นผลลัพธ์...

ตามผลลัพธ์ข้างต้น เรามีสองคอลัมน์ที่มีชื่อระบบและชื่อคอลเลกชันตามแบบสอบถามของเรา คุณอาจได้รับหลายคอลัมน์ขึ้นอยู่กับแบบสอบถามที่คุณจะใช้ ดังนั้นเราจึงต้องกรองข้อมูลตามคอลัมน์ที่ต้องการ

การกรองข้อมูลตารางตามคอลัมน์ —Last For-each loop ในสคริปต์ด้านบนจะกรองคอลัมน์แรก ( $data[0] ) ของชุดข้อมูลของเรา

เพิ่มค่าอาร์เรย์จาก [0] เป็น [1] เพื่อให้ได้ค่าคอลัมน์ถัดไป

ผ่านทาง Microsoft