cloudalex
cloudalex

Reputation: 1

Group a list containing duplicate values

I have a list of Servers and ip-addresses what i need to create a new firewall rule for.

ServerName   IP
Server1  192.168.1.1
Server1  192.168.1.2
Server2  10.10.10.10
Server2  10.100.10.10
Server2  192.168.1.3
Server3  192.168.3.3

If I loop the servername it will create a new rule for every entry, is there a way so sort the group like Server 1 192.168.1.1, 192.168.1.2 and then loop each IP and add to the rule?

Upvotes: 0

Views: 54

Answers (1)

Theo
Theo

Reputation: 61188

If your list is an array of objects, something like this:

$list = [PsCustomObject]@{'ServerName' = 'Server1'; 'IP' = '192.168.1.1'},
        [PsCustomObject]@{'ServerName' = 'Server1'; 'IP' = '192.168.1.2'},
        [PsCustomObject]@{'ServerName' = 'Server2'; 'IP' = '10.10.10.10'},
        [PsCustomObject]@{'ServerName' = 'Server2'; 'IP' = '10.100.10.10'},
        [PsCustomObject]@{'ServerName' = 'Server2'; 'IP' = '192.168.1.3'},
        [PsCustomObject]@{'ServerName' = 'Server3'; 'IP' = '192.168.3.3'}

then simply use the Group-Object and loop over

$list | Group-Object ServerName | ForEach-Object {
    # loop over the IP's in the server Group
    foreach ($item in $_.Group) {
        # add the rule. For Demo just output something
        Write-Host "Adding rule for '$($item.ServerName)' on IP: $($item.IP)"
    }
}

Result:

Adding rule for 'Server1' on IP: 192.168.1.1
Adding rule for 'Server1' on IP: 192.168.1.2
Adding rule for 'Server2' on IP: 10.10.10.10
Adding rule for 'Server2' on IP: 10.100.10.10
Adding rule for 'Server2' on IP: 192.168.1.3
Adding rule for 'Server3' on IP: 192.168.3.3

Upvotes: 0

Related Questions