If you are reading this you must have used PowerShell 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!
Prateek Singh
Related posts
0 Comments
Leave a Reply Cancel reply
Categories
Author of Books


Awards



Open Sourced Projects

Author at



Blog Roll
Mike F RobbinsDamien Van Robaeys
Stéphane van Gulick
Kevin Marquette
Adam Bertram
Stephanos Constantinou
Francois-Xavier Cat
Ravikanth Chaganti
Roman Levchenko
Blog Stats
- 103,067 People Reached
[…] on June 25, 2017 submitted by /u/Prateeksingh1590 [link] [comments] Leave a […]
Nice script, but couldnt the -Query parameter be used in place of a Where-Object for the Get-WmiObject cmdlet?
It’s not working for example with Get-ChildItem or Get-Process.
The $PSItem’s have no properties property.
Is not working with Get-ADUser
What I was using for this, is this function I made:
function Get-Values{
Get-Values “@domain.com”
Type or paste the command: Get-ADUser user -Properties *
EmailAddress : [email protected]
mail : [email protected]
This example searches the term “@user.com” in all properties of a command.
#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string]$Search
)
$Command = Read-Host “Type or paste the command”
$Command = Invoke-Expression $Command
$PropretiesOfTheCommand = $Command | Get-Member -MemberType Properties | select -ExpandProperty Name
$Properties = foreach ($Property in $PropretiesOfTheCommand){
$Property | Where {$Command.$Property -like “*$Search*”}
}
if ($Property -ne $Null){
$Property -join(“,”) | Out-Null
$Command | select $Properties | Format-List
} else{
Write-Host
Write-Warning “No properties found with that value”
Write-Host
}
}
Oh… The code didn’t paste well… The description is incomplete. But the command part of the function should work normally.