Alexandre.L
Alexandre.L

Reputation: 51

"Counting" in an arrays using powershell

Hi I'm trying to count number of arrow where two value are matched.

Here is how i put value in my array :

            $obj | add-member -name "Site" -membertype Noteproperty -value $sitecode
            $obj | add-member -name "Location" -membertype Noteproperty -value $location
            $obj | add-member -name "SwitchName" -membertype Noteproperty -value $swname
            $obj | add-member -name "MacAddress" -membertype Noteproperty -value $mac
            $obj | add-member -name "Interface" -membertype Noteproperty -value $eth
            $obj | add-member -name "Macvendor" -membertype Noteproperty -value ""
            $obj | add-member -name "IP" -membertype Noteproperty -value ""
            $tab += $obj

Now i would like to count each combibation of SwitchName / Interface.

Exemple my arrays can contains the following amongt other value :

Switchname=foo,portX
Switchname=foo,portY
Switchname=foo,portX
Switchname=foo,portZ
Switchname=bar,portX
Switchname=bar,portZ
Switchname=bar,portT

I want to be able to get :

Switchname=foo,portX,2
Switchname=foo,portY,1
Switchname=foo,portZ,1
Switchname=bar,portX,1
Switchname=bar,portZ,1
Switchname=bar,portT,1

I'm currently thinking about using another table to count all of this. Any easier way to do that?

Thanks.

Upvotes: 3

Views: 114

Answers (2)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174545

Use the Group-Object cmdlet:

PS C:\> $tab |Group-Object -Property SwitchName,Interface -NoElement

Count Name                     
----- ----                     
    2 foo, portX               
    1 foo, portY               
    1 foo, portZ               
    1 bar, portX               
    1 bar, portZ               
    1 bar, portT               

Upvotes: 1

Esperento57
Esperento57

Reputation: 17472

try Something like this:

$tab | select SwitchName, Interface , @{N="Number";E={$switchname=$_.SwitchName;$interface=$_.Interface; ($tab | where {$_.SwitchName -eq $switchname -and $_.Interface -eq $interface }).Count}}

Upvotes: 0

Related Questions