Seseorang dapat "cukup" terhubung ke database WSUS dan menjalankan query terhadapnya:
- Mulai SQL Management Studio dengan hak yang lebih tinggi.
- Terhubung ke
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
menggunakan Otentikasi Windows .
Tabel ini tampaknya menarik tentang pertanyaan Anda:
tbUpdate
Menyimpan informasi tentang pembaruan tunggal
tbTargetGroup
Menyimpan informasi tentang semua grup komputer
tbDeployment
Menyimpan informasi tentang pembaruan apa yang telah disetujui untuk grup komputer mana
Namun, tampaknya bermanfaat untuk menggunakan tampilan yang sudah ada vUpdateApproval
untuk mengambil sebagian besar informasi yang Anda cari, karena tampilan ini sudah menerjemahkan ActionID
kolom dari tbDeployment
antara lain.
The vUpdateApproval
pandangan, bagaimanapun, tidak termasuk judul mudah dibaca untuk update. Judul biasanya dibaca tbLocalizedProperty
. Untuk membuatnya lebih mudah bagi kita, ada pandangan lain: vUpdate
.
Saya tidak benar-benar memiliki data yang tepat di basis data WSUS kami untuk membuat kueri yang tepat yang sesuai dengan permintaan pertama Anda (dan saya tidak cukup percaya diri untuk membuatnya secara membabi buta). Jadi, inilah pendekatan untuk permintaan sekunder Anda. Jika saya tidak mengacaukannya, itu menghasilkan daftar semua pembaruan dan status persetujuan untuk semua grup.
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
;
Yang menghasilkan output ini di SBS Jerman kami:
Untuk SBS kami dengan 5 grup standarnya, ini menghasilkan baris hasil 1.21558 dalam ~ 26d. Jadi, jika Anda ingin bermain-main dengan kueri, mungkin disarankan untuk mengubah baris pertama SELECT TOP 1000
saat pengujian.
Saya juga meluangkan waktu untuk membungkus semuanya menjadi skrip 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
Harap perhatikan bahwa skrip ini menyertakan SELECT TOP 10
batasan untuk menghindari membanjiri shell Anda selama pengujian.