Uno puede "simplemente" conectarse a la base de datos WSUS y ejecutar consultas en su contra:
- Inicie SQL Management Studio con privilegios elevados.
- Conéctese
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
con la autenticación de Windows .
Estas tablas parecen ser de interés con respecto a su pregunta:
tbUpdate
Contiene información sobre actualizaciones individuales
tbTargetGroup
Contiene información sobre todos los grupos de computadoras
tbDeployment
Contiene información sobre qué actualizaciones se han aprobado para qué grupos de computadoras
Sin embargo, parece beneficioso utilizar la vista ya existente vUpdateApproval
para recuperar la mayor parte de la información que busca, ya que esta vista ya traduce la ActionID
columna tbDeployment
entre otras cosas.
La vUpdateApproval
vista, sin embargo, no incluye ningún título fácil de leer para las actualizaciones. Los títulos generalmente se leen tbLocalizedProperty
. Para que sea más fácil para nosotros, hay otro punto de vista: vUpdate
.
Realmente no tengo los datos adecuados en nuestra base de datos WSUS para construir la consulta adecuada que se ajuste a su primera solicitud (y no tengo la confianza suficiente para construirla a ciegas). Así que aquí hay un enfoque para su solicitud secundaria. Si no me equivoqué, produce una lista de todas las actualizaciones y el estado de aprobación para todos los grupos.
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
;
Lo que produce esta salida en nuestro SBS alemán:
Para nuestro SBS con sus 5 grupos predeterminados, esto produce 121558 filas de resultados en ~ 26s. Por lo tanto, si desea jugar con la consulta, puede ser recomendable cambiar la primera línea SELECT TOP 1000
durante la prueba.
También me tomé el tiempo para envolverlo todo en un script de 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
Tenga en cuenta que este script incluye la SELECT TOP 10
limitación para evitar inundar su shell durante las pruebas.