Người ta có thể "đơn giản" kết nối với cơ sở dữ liệu WSUS và chạy các truy vấn đối với nó:
- Bắt đầu SQL Management Studio với các đặc quyền nâng cao.
- Kết nối với
\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
sử dụng Windows xác thực .
Những bảng này dường như được quan tâm về câu hỏi của bạn:
tbUpdate
Giữ thông tin về các bản cập nhật duy nhất
tbTargetGroup
Giữ thông tin về tất cả các nhóm máy tính
tbDeployment
Giữ thông tin về những cập nhật đã được phê duyệt cho nhóm máy tính nào
Tuy nhiên, có vẻ có lợi khi sử dụng chế độ xem đã có sẵn vUpdateApproval
để truy xuất hầu hết thông tin mà bạn đang theo dõi, vì chế độ xem này đã dịch ActionID
cột từ tbDeployment
những thứ khác.
Các vUpdateApproval
quan điểm, tuy nhiên, không bao gồm bất kỳ danh hiệu dễ dàng có thể đọc được các bản cập nhật. Các tiêu đề thường được đọc từ tbLocalizedProperty
. Để giúp chúng tôi dễ dàng hơn, có một góc nhìn khác : vUpdate
.
Tôi thực sự không có dữ liệu phù hợp trong cơ sở dữ liệu WSUS của chúng tôi để xây dựng truy vấn phù hợp phù hợp với yêu cầu đầu tiên của bạn (và tôi không đủ tự tin để xây dựng nó một cách mù quáng). Vì vậy, đây là một cách tiếp cận cho yêu cầu thứ cấp của bạn. Nếu tôi không làm hỏng, nó sẽ tạo một danh sách tất cả các cập nhật và trạng thái phê duyệt cho tất cả các nhóm.
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
;
Sản phẩm này tạo ra sản phẩm này trên SBS Đức của chúng tôi:
Đối với SBS của chúng tôi với 5 nhóm mặc định, điều này tạo ra 121558 hàng kết quả trong ~ 26 giây. Vì vậy, nếu bạn muốn chơi xung quanh với truy vấn, có thể nên thay đổi dòng đầu tiên thành SELECT TOP 1000
trong khi thử nghiệm.
Tôi cũng đã dành thời gian để gói tất cả vào tập lệnh 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
Xin lưu ý rằng tập lệnh này bao gồm các SELECT TOP 10
giới hạn để tránh làm ngập vỏ của bạn trong quá trình thử nghiệm.