Extracting platform to softpaq mapping from security bulletins
In a previous post, we presented an approach for checking whether a given platform has a softpaq available that is mentioned in a given security bulletin.
To be clear, scripts shown in this blog are meant to illustrate concepts, and are not supported for production use by HP. Please feel free to use the concepts to create your own scripts, and always test your scripts on representative systems before going into production.
Here's an alternative, if you'd rather pull the entire list of softpaqs and platforms, and do your own processing.
The script
This time we'll start with the full script. The first half of the script is more or less the same as discussed in the previous blog post (minus the extra platform parameter), so we won't rehash that discussion. Check out the previous blog entry if you are not clear.
[CmdletBinding()] param( [ValidatePattern("^[cC][0-9]{3,12}$")] [Parameter(position=0, Mandatory=$true)] [string]$bulletin ) $url = "https://support.hp.com/us-en/document/$bulletin" $regex = 'https?:\/\/ftp\.hp\.com\/pub\/softpaq\/sp[0-9]{3,8}-[0-9]{3,8}\/sp([0-9]{3,8})\.exe' $page = Invoke-WebRequest -UseBasicParsing -Uri $url $paqs = $page.Links | where { $_.href -and $_.href.toLower() -Match $regex } ` | select @{ Name = 'obj'; Expression={([regex]::match($_.href.toLower(), $regex)).` Groups[1].Value} } $candidates = $paqs.obj | select -Unique $results = [System.Collections.ArrayList]@() $candidates | foreach { $__ = $_ try { $md = Get-SoftpaqMetadata -number $_ } catch { Write-Warning "$__ is missing from the server, will not be included in result." } $md."System Information".Keys| where {$_ -Like "Sysid*"} | foreach { $num = "SysName$($_.ToLower().trim('Sysid'))" $item = New-Object psobject -Property @{ name=$md.'System Information'[$num]; sysid=$md."System Information"[$_].ToUpper().Replace('0X',""); softpaq=$__ } $results.add($item) } | out-null } $results | sort -Property name
How it works
So what did we just do?
Instead of using Get-SoftpaqList, this time we retrieve the softpaq path, then retrieve that softpaq's metadata using the Get-SoftpaqMetadata function. This metadata contains various interesting information (softpaq name vendor, etc), but here we are interested in its list of supported platforms and system IDs.
Once we get the metadata for each softpaq mentioned in the bulletin, we do some work to create a table of softpaqs, system IDs, and system names, and we return that list to the caller.
Note: Using this approach, it is possible that this list will contain more platforms than mentioned in the bulletin, in cases where the softpaq mentioned covers multiple paltforms, but the bulletin addresses only a subset of those platforms.
Trying it out
If you run this script against the Zombieland bulletin for example, you should get a list similar to the following:
softpaq name sysid ------- ---- ----- 95654 HP 260 G2 DM,HP 260 G2 DM BUSINESS 8184 95652 HP 260 G3 84F5 95654 HP 280 G2 MICROTOWER BUSINESS 2B5E 95654 HP 280 G2 SMALL FORM FACTOR 82C9 95654 HP 280 G2 SMALL FORM FACTOR 8425 95652 HP 280 G3 8350 95652 HP 280 G3 0001 95652 HP 280 G3 834F 95683 HP 340 G4,HP 348 G4 852A 95683 HP 340 G4,HP 348 G4 82C8 95683 HP 340 G4,HP 348 G4 8529 95683 HP 340 G4,HP 348 G4 82C5 95683 HP 340 G4,HP 348 G4 82C3 ...
Where to next
You can feed this result into your own scripts and use Get-Softpaq function to retrieve the softpaqs of interest (the first column in the output) for a given subset of platforms. We recommend that you do not attempt to match platforms by the product name, but rather by the product ID (the four digit hexadecimal string). It is possible that the same product name may map to multiple product IDs, or vice-versa, due to platform generation or configuration variations.
And that wraps today's edition of Fun with PowerShell, brought to you by HP. Hope you found this helpful. Keep in mind that these blog postings are not fully optimized for any particular purpose. Where a choice had to be made, we opted for for readability over performance.
Summary image credit Gnist Design, Tromsø, Norway, via pexels.com