Selecting Objects by value in Powershell


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

1

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

1

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?

1

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 –

  1. You can search a value directly in object properties, without being aware of the property name, the function does all the searching for you.

    1

  2. It adds the property of the matching value to the default display properties so that you can see Property-Value pair on the console.
  3. Maintains the Object type, and properties so that you can further use it in the pipeline or perform a set of operations.

    1

  4. Compared to other filtering methods the function performs well, without any significant difference in execution time.

    1

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

Hoping you’ll find it useful, cheers!

signature 

 

 

 

 

 

 

 

Advertisements

6 thoughts on “Selecting Objects by value in Powershell

    1. 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 : user@domain.com
      mail : user@domain.com

      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
      }
      }

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s