Man kann "einfach" eine Verbindung zur WSUS-Datenbank herstellen und Abfragen dagegen ausführen:
- Starten Sie SQL Management Studio mit erhöhten Berechtigungen.
- Eine Verbindung mit
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
Verwendung von Windows - Authentifizierung .
Diese Tabellen scheinen in Bezug auf Ihre Frage von Interesse zu sein:
tbUpdate
Enthält Informationen zu einzelnen Updates
tbTargetGroup
Enthält Informationen zu allen Computergruppen
tbDeployment
Enthält Informationen darüber, welche Updates für welche Computergruppen genehmigt wurden
Es erscheint jedoch vorteilhaft, die bereits vorhandene Ansicht vUpdateApproval
zu verwenden, um die meisten Informationen abzurufen, nach denen Sie suchen, da diese Ansicht die ActionID
Spalte tbDeployment
unter anderem bereits übersetzt .
Die vUpdateApproval
Ansicht enthält jedoch keine leicht lesbaren Titel für Aktualisierungen. Die Titel werden normalerweise aus gelesen tbLocalizedProperty
. Um es uns einfacher zu machen, gibt es noch eine andere Sichtweise : vUpdate
.
Ich habe nicht wirklich die richtigen Daten in unserer WSUS-Datenbank, um die richtige Abfrage zu erstellen, die zu Ihrer ersten Anfrage passt (und ich bin nicht sicher genug, um sie blind zu erstellen). Hier ist ein Ansatz für Ihre sekundäre Anfrage. Wenn ich es nicht vermasselt habe, wird eine Liste aller Aktualisierungen und der Genehmigungsstatus für alle Gruppen erstellt.
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
;
Welches erzeugt diese Ausgabe auf unserem deutschen SBS:
Für unseren SBS mit seinen 5 Standardgruppen werden 121558 Ergebniszeilen in ~ 26 Sekunden erzeugt. Wenn Sie also mit der Abfrage herumspielen möchten, kann es ratsam sein, SELECT TOP 1000
beim Testen die erste Zeile in zu ändern .
Ich habe mir auch die Zeit genommen, alles in ein PowerShell-Skript zu packen:
# 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
Bitte beachten Sie, dass dieses Skript die SELECT TOP 10
Einschränkung enthält, um ein Überfluten Ihrer Shell während des Testens zu vermeiden.