# encoding: ascii
# api: powershell
# title: where-property
# description: different examples of how you can access properties with a custom where function
# version: 0.1
# type: function
# author: karl prosser
# license: CC0
# function: where-property
# x-poshcode-id: 2570
# x-archived: 2012-12-29T04:10:48
# x-published: 2012-03-18T12:27:00
#
#
function where-property([string] $PropertyName,[string]$SubProperty , $is,$isnot,$contains,$in)
{
process {
if ($is)
{
if ($_.$Propertyname -eq $is) { , $_ }
}
elseif ($isnot)
{
if ($_.$Propertyname -ne $is) { , $_ }
}
elseif($contains)
{
if ($subproperty)
{
foreach ($prop in $_.$propertyname )
{
if ($prop)
{
$subpropertyvalue = $prop.$subproperty
if ($subpropertyvalue -contains $contains ) { , $_ }
}
}
}
else
{
if ($_.$Propertyname -contains $contains) { , $_ }
}
}
elseif($in)
{
if ($in -contains $_.$Propertyname) { , $_ }
}
}
}
#set-alias and-property where-property
#get-processes with a specific name
gps | where-property processname -is svchost
#get-processes all but a specific name
gps | where-property processname -isnot svchost
#get-processes with the processname in a specific list
gps | where-property processname -in iexplore,chrome
#get verbs in a specific group
get-verb | where-property group -in common
#get-commands that have a specific named parameter
get-command | where-property parameters -subproperty keys -contains Begin
#and using an a lias to this for the and since it seems more HUMAN to say where X and Y, rather than Where x where y
get-command | where-property parameters -subproperty keys -contains Name | and-property commandtype -is alias