If you are reading this you must have used Select-object in PowerShell to select properties of an object something like

Or, Where-Object cmdlet to filter out values on any specific object property like

All these work well when you know the Property Name you are searching.

But what if you don’t know the property name and you’re sure that there is a value against some property which you’re searching.

For example, I know in the object of WMI class Win32_OperatingSystem there is a Property-value pair for Windows operating system name, but what if I don’t know the exact Property name against which this value may be present, then how I’d get the value?

The normal approach is to list all the properties and values like in the following

Get-WmiObject win32_OperatingSystem | Select-Object *

Or,

Get-WmiObject win32_OperatingSystem | Format-List *

and then manually scan through the result until you find the Property-Value pair you were looking, so that you can use the property name to get the value next time.

I’ve done this often and I’m sure you’ve experienced this as well, but things get tough when there are more than 100 properties in an object for example in an AD object.

I think there has to be a smarter way to search the values even though, we don’t know the name of the property.

Hence I wrote this quick function Select-Value , which has following capabilities –

You can search a value directly in object properties, without being aware of the property name, the function does all the searching for you. It adds the property of the matching value to the default display properties so that you can see Property-Value pair on the console. Maintains the Object type, and properties so that you can further use it in the pipeline or perform a set of operations. Compared to other filtering methods the function performs well, without any significant difference in execution time.

Add this quick function to your profile and share your feedback.

Hoping you’ll find it useful, cheers!

Follow @singhprateik