ฉันใช้ฐานข้อมูล 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