Reputation: 1
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
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