One parameter that seems to get overlooked on Get-WmiObject is the –Property parameter. It is used to specify the properties you want returned.
This is what you would normally get by default:
PS> Get-WmiObject -Class Win32_Service | select -f 1
ExitCode : 0
Name : AdobeARMservice
ProcessId : 1716
StartMode : Auto
State : Running
Status : OK
The full property list looks like this:
PS> Get-WmiObject -Class Win32_Service | select -f 1 | fl *
PSComputerName : RSLAPTOP01
Name : AdobeARMservice
Status : OK
ExitCode : 0
DesktopInteract : False
ErrorControl : Ignore
PathName : "C:\Program Files\Common Files\Adobe\ARM\1.0\armsvc.exe"
ServiceType : Own Process
StartMode : Auto
__GENUS : 2
__CLASS : Win32_Service
__SUPERCLASS : Win32_BaseService
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_Service.Name="AdobeARMservice"
__PROPERTY_COUNT : 25
__DERIVATION : {Win32_BaseService, CIM_Service, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : RSLAPTOP01
__NAMESPACE : root\cimv2
__PATH : \\RSLAPTOP01\root\cimv2:Win32_Service.Name="AdobeARMservice"
AcceptPause : False
AcceptStop : True
Caption : Adobe Acrobat Update Service
CheckPoint : 0
CreationClassName : Win32_Service
Description : Adobe Acrobat Updater keeps your Adobe software up to date.
DisplayName : Adobe Acrobat Update Service
InstallDate :
ProcessId : 1716
ServiceSpecificExitCode : 0
Started : True
StartName : LocalSystem
State : Running
SystemCreationClassName : Win32_ComputerSystem
SystemName : RSLAPTOP01
TagId : 0
WaitHint : 0
Scope : System.Management.ManagementScope
Path : \\RSLAPTOP01\root\cimv2:Win32_Service.Name="AdobeARMservice"
Options : System.Management.ObjectGetOptions
ClassPath : \\RSLAPTOP01\root\cimv2:Win32_Service
Properties : {AcceptPause, AcceptStop, Caption, CheckPoint…}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY…}
Qualifiers : {dynamic, Locale, provider, UUID}
Site :
Container :
You can restrict the properties returned:
PS> Get-WmiObject -Class Win32_Service -Property SystemName, Name, DisplayName | select -f 1
__GENUS : 2
__CLASS : Win32_Service
__SUPERCLASS :
__DYNASTY :
__RELPATH : Win32_Service.Name="AdobeARMservice"
__PROPERTY_COUNT : 3
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
DisplayName : Adobe Acrobat Update Service
Name : AdobeARMservice
SystemName : RSLAPTOP01
PSComputerName :
problem is you still get the system properties (those that start __ )
PS> Get-WmiObject -Class Win32_Service -Property SystemName, Name, DisplayName | select -f 1 | fl SystemName, Name, DisplayName
SystemName : RSLAPTOP01
Name : AdobeARMservice
DisplayName : Adobe Acrobat Update Service
replace the format-list (fl) by another select if you want to do anything with the object.
The new CIM cmdlets in PowerShell v3 also have a property parameter
PS> Get-CimInstance -Class Win32_Service -Property SystemName, Name, DisplayName | select -f 1
Name : AdobeARMservice
Status :
ExitCode :
DesktopInteract :
ErrorControl :
PathName :
ServiceType :
StartMode :
Caption :
Description :
InstallDate :
CreationClassName :
Started :
SystemCreationClassName :
SystemName : RSLAPTOP01
AcceptPause :
AcceptStop :
DisplayName : Adobe Acrobat Update Service
ServiceSpecificExitCode :
StartName :
State :
TagId :
CheckPoint :
ProcessId :
WaitHint :
PSComputerName :
CimClass : root/cimv2:Win32_Service
CimInstanceProperties : {Caption, Description, InstallDate, Name…}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
This only populates the select properties but displays all properties by default!
use select again to restrict
PS> Get-CimInstance -ClassName Win32_Service -Property SystemName, Name, DisplayName | select -f 1 | fl SystemName, Name, DisplayName
SystemName : RSLAPTOP01
Name : AdobeARMservice
DisplayName : Adobe Acrobat Update Service
Either way – WMI or CIM – you have to do a bit more work but the important point is that only the properties you want are returned across the network. Reduces traffic and should boost performance.
Using a WQL query returns the results shown above. This is because the –Filter parameter is turned into a WQL query.