# 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: 2571 # x-archived: 2012-11-30T21:29:48 # x-published: 2012-03-19T14:49:00 # # function where-property([string] $PropertyName,[string]$SubProperty , $is,$isnot,$contains,$in,$SelectProperty) { process { $useprop = $SelectProperty Function _outobj { if ($useprop ) { , $_.$useprop } else { , $_ } } if ($is) { if ($_.$Propertyname -eq $is) { _outobj} } elseif ($isnot) { if ($_.$Propertyname -ne $is) { _outobj} } elseif($contains) { if ($subproperty) { foreach ($prop in $_.$propertyname ) { if ($prop) { $foundmatch = $false $subpropertyvalue = $prop.$subproperty if ($subpropertyvalue -contains $contains ) { $foundmatch = $true } if ($foundmatch) { _outobj } } } } else { if ($_.$Propertyname -contains $contains) { _outobj} } } elseif($in) { if ($subproperty) { foreach ($prop in $_.$propertyname ) { if ($prop) { $foundmatch = $false #{ "RpcSs","AppID" -contains $_.servicesdependedon.name } if ($in -contains $prop.$subproperty ) { $foundmatch = $true } if ($foundmatch) { _outobj } } } } else { if ($in -contains $_.$Propertyname ) { _outobj} } #if ($in -contains $_.$Propertyname) { _outobj} } } } set-alias ?. where-property set-alias and. where-property 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 #get displayname of services that depend other services appid,rpcss get-service | where-property ServicesDependedOn -SubProperty name -in AppID,rpcss | and-property status -is running -SelectProperty Displayname