Bir WSUS veritabanına "basitçe" bağlanabilir ve buna karşı sorgular çalıştırabilir:
- SQL Management Studio'yu yükseltilmiş ayrıcalıklarla başlatın.
- Windows Kimlik Doğrulaması
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
kullanarak bağlanın .
Bu tablolar sorunuzla ilgileniyor gibi görünüyor:
tbUpdate
Tekli güncellemeler hakkında bilgi tutar
tbTargetGroup
Tüm bilgisayar grupları hakkında bilgi tutar
tbDeployment
Hangi bilgisayar grupları için hangi güncelleştirmelerin onaylandığı hakkında bilgi tutar
Bununla birlikte, vUpdateApproval
peşinde olduğunuz bilgilerin çoğunu almak için zaten var olan görünümü kullanmak yararlı görünmektedir , çünkü bu görünüm zaten ActionID
sütunu tbDeployment
diğer şeylerin yanı sıra çevirmektedir .
Ancak vUpdateApproval
görünüm, güncellemeler için kolayca okunabilir başlıklar içermez. Başlıklar genellikle okunmaktadır tbLocalizedProperty
. Bizim için daha kolay hale getirmek için, başka bir görünüm var: vUpdate
.
Gerçekten ilk isteğinize uygun uygun sorgu oluşturmak için WSUS veritabanımızda uygun veri yok (ve körü körüne oluşturmak için yeterince emin değilim). İşte ikincil isteğiniz için bir yaklaşım. Eğer karışıklık yaratmazsam, tüm güncellemelerin bir listesini ve tüm gruplar için onay durumunu oluşturur.
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
;
Alman SBS'mizde bu çıktıyı üreten:
5 varsayılan grubu olan SBS için bu, ~ 26s içinde 121558 sonuç satırı üretir. Bu nedenle, sorgu ile oynamak istiyorsanız, SELECT TOP 1000
test sırasında ilk satırı değiştirmeniz tavsiye edilebilir .
Ben de hepsini bir PowerShell betiği içine sarmak için zaman aldı:
# 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
Bu komut dosyasının SELECT TOP 10
test sırasında kabuğunuzu taşmasını önlemek için sınırlama içerdiğini lütfen unutmayın .