Leptonator
Leptonator

Reputation: 3499

PowerShell or QuickfixEngineering issue?

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

Answers (2)

Chris Kuperstein
Chris Kuperstein

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.

Source:

https://blogs.technet.microsoft.com/heyscriptingguy/2011/08/22/use-powershell-to-easily-find-information-about-hotfixes/

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

briantist
briantist

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

Related Questions