On peut "simplement" se connecter à la base de données WSUS et exécuter des requêtes sur celle-ci:
- Démarrez SQL Management Studio avec des privilèges élevés.
- Connectez-vous à l'
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
aide de l' authentification Windows .
Ces tableaux semblent intéresser votre question:
tbUpdate
Contient des informations sur les mises à jour uniques
tbTargetGroup
Contient des informations sur tous les groupes d'ordinateurs
tbDeployment
Contient des informations sur les mises à jour approuvées pour quels groupes d'ordinateurs
Cependant, il semble avantageux d'utiliser la vue déjà existante vUpdateApproval
pour récupérer la plupart des informations que vous recherchez, car cette vue traduit déjà la ActionID
colonne tbDeployment
entre autres choses.
La vUpdateApproval
vue, cependant, ne comprend aucun titre facilement lisible pour les mises à jour. Les titres sont généralement lus tbLocalizedProperty
. Pour le rendre plus facile pour nous, il y a une autre vue: vUpdate
.
Je n'ai pas vraiment les données appropriées dans notre base de données WSUS pour construire la requête appropriée qui conviendrait à votre première demande (et je ne suis pas assez confiant pour la construire aveuglément). Voici donc une approche pour votre demande secondaire. Si je ne me trompe pas, il produit une liste de toutes les mises à jour et l'état d'approbation pour tous les groupes.
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
;
Ce qui produit cette sortie sur notre SBS allemand:
Pour notre SBS avec ses 5 groupes par défaut, cela produit 121558 lignes de résultats en ~ 26s. Donc, si vous voulez jouer avec la requête, il peut être conseillé de changer la première ligne en SELECT TOP 1000
pendant le test.
J'ai également pris le temps de tout résumer dans un script 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
Veuillez noter que ce script inclut la SELECT TOP 10
limitation pour éviter d'inonder votre shell pendant les tests.