Getting the CVE ID Property of an update from WSUS API via Powershell
Posted
by thebitsandthebytes
on Stack Overflow
See other posts from Stack Overflow
or by thebitsandthebytes
Published on 2010-04-01T14:54:30Z
Indexed on
2010/04/01
16:33 UTC
Read the original article
Hit count: 582
I am writing a script in Powershell to get the update information from each computer and correlate the information with another System which identifies updates by CVE ID. I have discovered that there is a "CVEIDs" property for an update in WSUS, which is documented in MSDN, but I have no idea how to access the property. Retrieving the CVE ID from WSUS is the key to this script, so I am hoping someone out there can help!
Here is the property that I am having difficulty accessing:
IUpdate2::CveIDs Property - http://msdn.microsoft.com/en-us/library/aa386102(VS.85).aspx
According to this, the IUnknown::QueryInterface method is needed to interface IUpdate2 - "http://msdn.microsoft.com/en-us/library/ee917057(PROT.10).aspx"
"An IUpdate instance can be retrieved by calling the IUpdateCollection::Item (opnum 8) (section 3.22.4.1) method.
The client can use the IUnknown::QueryInterface method to then obtain an IUpdate2, IUpdate3, IUpdate4, or IUpdate5 interface. Additionally, if the update is a driver, the client can use the IUnknown::QueryInterface method to obtain an IWindowsDriverUpdate, IWindowsDriverUpdate2, IWindowsDriverUpdate3, IWindowsDriverUpdate4, or IWindowsDriverUpdate5 interface. "
Here is a skeleton of my code:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null
if (!$wsus) {
Returns an object that implements IUpdateServer
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($server, $false, $port) }
$computerScope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope $updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope $updateScope.UpdateSources = [Microsoft.UpdateServices.Administration.UpdateSources]::MicrosoftUpdate $wsusMachines = $wsus.GetComputerTargets($computerScope)
foreach machine in QSUS, write the full domain name
$wsusMachines | ForEach-Object { Write-host $.FullDomainName $updates = $.GetUpdateInstallationInfoPerUpdate($updateScope)
foreach update for each machine, write the update title, installation state and securitybulletin
$updates | ForEach-Object { $update = $wsus.GetUpdate($.UpdateId) # Returns an object that implements Microsoft.UpdateServices.Administration.IUpdate $updateTitle = $update.Title | Write-Host $updateInstallationState = $.UpdateInstallationState | Write-Host $updateSecurityBulletin = $update.SecurityBulletins | Write-Host $updateCveIds = $update.CveIDs # ERROR: Property 'CveIDs' belongs to IUpdate2, not IUpdate } }
© Stack Overflow or respective owner