Reputation: 3499
This URL or KB ID (KB3139852) does not mean much: https://support.microsoft.com/en-us/kb/3139852
But, if we navigate to the URL, we see more of a high-level and what the HF means: "MS16-034: Description of the security update for Windows kernel-mode drivers: March 8, 2016 "
Get-Hotfix -ComputerName $server | Select HotfixID, Caption, InstalledOn | Where { $_.InstalledOn -gt (Get-Date).AddDays(-4) } | sort InstalledOn
Even if we run with PowerShell, just Get-Hotfix
, it does not provide much detail about what the HotFix means.
I would suppose that I could have PowerShell navigate to the Microsoft URL to provide the information that I am looking for, but I would think it should be labeled as part of QuickFixEngineering? Or, am I going about this the wrong way?
Thanks!
Upvotes: 1
Views: 670
Reputation: 678
The funny thing about the Get-Hotfix cmdlet in Powershell is, its actually just pulling from Win32_QuickFixEngineering. So yes, you're already partially correct in thinking it should be labeled as QFE... since it is.
Doing
Get-Hotfix
and
GWMI -Class Win32_QuickFixEngineering
will give you the exact same results. It returns you the dataset from cimv2\Win32_QuickFixEngineering.
As for what is available from this under-extended part of WMI, you have the following
Name MemberType Definition
---- ---------- ----------
PSComputerName AliasProperty PSComputerName = __SERVER
Caption Property string Caption {get;set;}
CSName Property string CSName {get;set;}
Description Property string Description {get;set;}
FixComments Property string FixComments {get;set;}
HotFixID Property string HotFixID {get;set;}
InstallDate Property string InstallDate {get;set;}
InstalledBy Property string InstalledBy {get;set;}
Name Property string Name {get;set;}
ServicePackInEffect Property string ServicePackInEffect {get;set;}
Status Property string Status {get;set;}
__CLASS Property string __CLASS {get;set;}
__DERIVATION Property string[] __DERIVATION {get;set;}
__DYNASTY Property string __DYNASTY {get;set;}
__GENUS Property int __GENUS {get;set;}
__NAMESPACE Property string __NAMESPACE {get;set;}
__PATH Property string __PATH {get;set;}
__PROPERTY_COUNT Property int __PROPERTY_COUNT {get;set;}
__RELPATH Property string __RELPATH {get;set;}
__SERVER Property string __SERVER {get;set;}
__SUPERCLASS Property string __SUPERCLASS {get;set;}
PSStatus PropertySet PSStatus {__PATH, Status}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
InstalledOn ScriptProperty System.Object InstalledOn {get=if ([environment]::osversion.version.build -ge ...
Which does not give you what you're looking for (A detailed description beyond what the 'Description' property gives you)
Unfortunately, I cannot do the legwork with Invoke-WebRequest behind my corporate proxy since https://support.microsoft.com/en-us/kb/3139852 requires some additional credential and proxy piping, but to no avail, there is another way to get your information.
The quick rundown on getting it would be through the Win32_ReliabilityRecords class and then filtering based on the sourcename.
$i = Get-WmiObject -Class Win32_ReliabilityRecords
$i = $i | where { $_.sourcename -match 'Microsoft-Windows-WindowsUpdateClient' }
$i.ProductName
# I broke it down into multiple operations to
# simplify for others
Which gives you stuff like
Update for Microsoft Office 2010 (KB2965291) 32-Bit Edition
Update for Microsoft Filter Pack 2.0 (KB2881026) 32-Bit Edition
Update for Microsoft Visual Studio 2010 Tools for Office Runtime (KB3001652)
Update for Microsoft Outlook 2010 (KB3015585) 32-Bit Edition
Update for Microsoft Office 2010 (KB2956141) 32-Bit Edition
Update for Microsoft Visio Viewer 2010 (KB2881021) 32-Bit Edition
Update for Windows 7 for x64-based Systems (KB3006625)
Hope this helped.
Upvotes: 1
Reputation: 47782
I'm not sure what you mean by "should be labeled as part of QuickFixEngineering" but if you want to retrieve the title of the update, you can do so with Invoke-WebRequest
:
$ua = 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)'
$uri = 'https://support.microsoft.com/en-us/kb/3139852'
$response = Invoke-WebRequest -Uri $uri -UserAgent $ua
$title = $response.AllElements.Where({$_.tagName -eq 'title'}).innerText
Note that I had to impersonate a crawler to get this to work, because by default it seems that Microsoft's page uses client-side javascript to populate the elements, and there is no information available to parse in the page.
Upvotes: 1