2017-02-01 7 views
3

Hallo Ich versuche zu zählen Anzahl der Pfeil, wo zwei Wert übereinstimmen."Zählen" in einem Array mit Powershell

Hier ist, wie ich legte Wert in meinem 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 

Jetzt würde ich jedes combibation von switch/Schnittstellen zählen möchte.

Exemple meine Arrays enthält folgende amongt anderen Wert:

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

Ich möchte erhalten können:

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

ich zur Zeit darüber nachzudenken, eine andere Tabelle mit allen zählen Dies. Eine einfachere Möglichkeit, das zu tun?

Danke.

+1

'$ tab | Gruppe SwitchName, Schnittstelle | % {@ ($ _. Werte; $ _. Count) -join ','} ' – PetSerAl

+0

Das funktioniert, ich wusste, es könnte etwas" Einfaches "sein. Vielen Dank. –

Antwort

0

versuchen, etwas wie folgt aus:

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

Das funktioniert auch, die Ausgabe ist ein bisschen "unordentlicher" als die andere Antwort, aber es funktioniert! Vielen Dank. –

1

Verwenden Sie das Group-Object Cmdlets:

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    
+0

Das funktioniert auch, ich wusste, es könnte etwas "Einfaches" sein. Vielen Dank. –

Verwandte Themen