एक "बस" WSUS डेटाबेस से कनेक्ट कर सकता है और इसके खिलाफ क्वेरी चला सकता है:
- एलीवेटेड विशेषाधिकारों के साथ एसक्यूएल प्रबंधन स्टूडियो शुरू करें।
- Windows प्रमाणीकरण
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
का उपयोग करने के लिए कनेक्ट करें ।
इन तालिकाओं में आपके प्रश्न के बारे में रुचि है:
tbUpdate
एकल अद्यतन के बारे में जानकारी रखता है
tbTargetGroup
सभी कंप्यूटर समूहों के बारे में जानकारी प्राप्त करता है
tbDeployment
किस कंप्यूटर समूह के लिए क्या अपडेट स्वीकृत किए गए हैं, इस बारे में जानकारी रखता है
हालाँकि, पहले से मौजूद vUpdateApproval
जानकारी को पुनः प्राप्त करने के लिए पहले से मौजूद दृश्य का उपयोग करना फायदेमंद लगता है , क्योंकि यह दृश्य पहले ActionID
से tbDeployment
ही अन्य चीजों से कॉलम का अनुवाद करता है ।
vUpdateApproval
देखने के लिए, तथापि, अद्यतन के लिए किसी भी आसानी से पढ़ने योग्य खिताब शामिल नहीं है। शीर्षक आमतौर से पढ़ा जाता है tbLocalizedProperty
। हमारे लिए इसे आसान बनाने के लिए, एक और दृश्य है vUpdate
:।
मेरे पास उचित क्वेरी के निर्माण के लिए हमारे WSUS डेटाबेस में वास्तव में उचित डेटा नहीं है जो आपके पहले अनुरोध को फिट करेगा (और मैं इसे आँख बंद करके निर्माण करने के लिए पर्याप्त आश्वस्त नहीं हूं)। तो यहाँ आपके माध्यमिक अनुरोध के लिए एक दृष्टिकोण है। अगर मैं गड़बड़ नहीं करता, तो यह सभी समूहों के लिए सभी अद्यतनों और अनुमोदन स्थिति की एक सूची तैयार करता है।
SELECT
aUpdate.UpdateId,
aUpdate.DefaultTitle,
aGroup.Name as GroupName,
aApproval.Action as Action
FROM
PUBLIC_VIEWS.vUpdate AS aUpdate INNER JOIN
PUBLIC_VIEWS.vUpdateApproval AS aApproval ON aUpdate.UpdateId = aApproval.UpdateId LEFT JOIN
dbo.tbTargetGroup as aGroup ON aGroup.TargetGroupID = aApproval.ComputerTargetGroupId
;
जो हमारे जर्मन एसबीएस पर इस उत्पादन का उत्पादन करता है:
अपने 5 डिफ़ॉल्ट समूहों के साथ हमारे SBS के लिए, यह ~ 26s में 121558 परिणाम पंक्तियों का उत्पादन करता है। इसलिए, यदि आप क्वेरी के साथ खेलना चाहते हैं, तो SELECT TOP 1000
परीक्षण करते समय पहली पंक्ति को बदलना उचित हो सकता है ।
मैंने इसे एक PowerShell स्क्रिप्ट में लपेटने के लिए भी समय लिया:
# Where to connect to
$dataSource = "\\.\pipe\MSSQL`$MICROSOFT##SSEE\sql\query"
$connectionTimeout = 30
# The query we want to perform against the WSUS database
$query = @"
SELECT TOP 10
aUpdate.UpdateId,
aUpdate.DefaultTitle,
aGroup.Name as GroupName,
aApproval.Action as Action
FROM
PUBLIC_VIEWS.vUpdate AS aUpdate INNER JOIN
PUBLIC_VIEWS.vUpdateApproval AS aApproval ON aUpdate.UpdateId = aApproval.UpdateId LEFT JOIN
dbo.tbTargetGroup as aGroup ON aGroup.TargetGroupID = aApproval.ComputerTargetGroupId
"@
$queryTimeout = 120
# Construct the connection string
$connectionString = "Data Source={0};Integrated Security=True;Connect Timeout={1};Database=SUSDB" -f $dataSource,$connectionTimeout
# Open the connection to the SQL server
$connection = New-Object System.Data.SqlClient.SQLConnection
$connection.ConnectionString = $connectionString
$connection.Open()
# Construct our SQL command
$sqlCommand = New-Object system.Data.SqlClient.SqlCommand( $query, $connection )
$sqlCommand.CommandTimeout = $queryTimeout
# Retrieve the data from the server
$dataSet = New-Object system.Data.DataSet
$dataAdapter = New-Object system.Data.SqlClient.SqlDataAdapter( $sqlCommand )
[void]$dataAdapter.fill( $dataSet )
# Clean up
$connection.Close()
# Output result
$dataSet.Tables
कृपया ध्यान दें कि इस स्क्रिप्ट में SELECT TOP 10
परीक्षण के दौरान अपने खोल को बाढ़ से बचने के लिए सीमा शामिल है ।