0

want to populate the following PSObject so it can have a one:one or one:many relationship between IPs and hostnames.

$hostobj = New-Object PSOBject
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value ""
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value ""

This gives me the correct headings but when I try add more than one value, it will error one trying to add the repeat values:

$hostobj = New-Object PSOBject
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value "1.1.1.1"
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value "server1"
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value "2.2.2.2"
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value "server2"

Why is this?

Can do the one to many bit fairly easily:

$hostobj = New-Object PSOBject
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value "1.1.1.1"
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value "server1", "server2", "server3"

Either of these is the data set to extra from:

1.1.1.1     server1     
2.2.2.2     server2
3.3.3.3     server3
4.5.6.7     server4     server5     server6     server7     
8.8.8.8     server8     
9.9.9.9     server9

1.1.1.1
server1
2.2.2.2
server2
3.3.3.3
server3
4.5.6.7
server4
server5
server6
server7
8.8.8.8
server8
9.9.9.9
server9
Guy Wood
  • 255
  • 4
  • 15

1 Answers1

0

you want to create a list of objects like:

$ArrayList = New-Object System.Collections.ArrayList

$hostobj = New-Object PSOBject
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value "1.1.1.1"
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value "server1"

$ArrayList.Add($hostobj)

$hostobj = New-Object PSOBject
$hostobj | Add-Member -MemberType NoteProperty -Name "ip_address" -Value "2.2.2.2"
$hostobj | Add-Member -MemberType NoteProperty -Name "hostnames" -Value "server2"

$ArrayList.Add($hostobj)

so that $ArrayList contains all the host objects. and each object has one value for ip_address and hostnames.

If this does not help you please specify what you expect/what exactly you are trying to do/work with.

Guenther Schmitz
  • 1,955
  • 1
  • 9
  • 23
  • Thanks, so this is an array list containing multiple PSObjects, correct? – Guy Wood Aug 08 '18 at 15:07
  • 1
    you can do this in a much shorter format: `[System.Collections.ArrayList]$ArrayList = @( [PSCustomObject]@{ ip_address = "1.1.1.1"; hostnames = "server1" }, [PSCustomObject]@{ ip_address = "2.2.2.2"; hostnames = "server2" } )` – colsw Aug 08 '18 at 15:20