Простой вопрос PowerShell - Как преобразовать объект в массив - PullRequest
0 голосов
/ 28 октября 2018

У меня есть переменная, которая содержит следующее:

Site                      IP

walmart                   10.20.30.40
walmart                   10.20.30.41
walmart                   10.20.30.42
target                    10.20.30.50
target                    10.20.30.51
hm                        10.20.30.60

Это объект, созданный с использованием New-Object psobject -Property @{ site = <code> ; IP = <code> }. Так что, если я позвоню $obj.site, он перечислит только сайты и то же самое с IP.

Я хочу преобразовать это в массив , сгруппированный по сайтам .

Например, вывод результата должен выглядеть следующим образом:

walmart     :  {10.20.30.40, 10.20.30.41, 10.20.30.42}
target      :  {10.20.30.50, 10.20.30.51}
hm          :  {10.20.30.60}

Я хочу иметь возможность вызывать это из моего скрипта, например, по причинам, таким как добавление или вычитание IP на любом сайте. Например:

$myArray.target 

Какой список IP-адресов должен содержать:

10.20.30.50
10.20.30.51

Вместо того же формата - {10.20.30.50, 10.20.30.51}

Тогда я бы добавил больше IP-адресов к этому объекту, используя метод Add.

($myArray.walmart).Add("10.20.30.44")

Самое близкое, что я смог получить, это следующее (и его вывод):

$obj | Group-Object -Property Site | Select-Object Name,Group

Name            Group

walmart         {@{Site=walmart; IP=10.20.30.40}, @{Site=walmart; IP=10.20.30.41}, @{Site=walmart; IP=10.20.30.42}
target          {@{Site=target; IP=10.20.30.50}, @{Site=target; IP=10.20.30.51}
hm              {@{Site=hm; IP=10.20.30.60}

С этим выводом я не могу позвонить на конкретный сайт, например $myArray.walmart.

Я довольно новичок в powershell, чего мне не хватает? Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 28 октября 2018

попробуй что-то вроде этого:

$Array=@(
[pscustomobject]@{Site='walmart'; ID='10.20.30.40'}
[pscustomobject]@{Site='walmart'; ID='10.20.30.41'}
[pscustomobject]@{Site='walmart'; ID='10.20.30.42'}
[pscustomobject]@{Site='target'; ID='10.20.30.50'}
[pscustomobject]@{Site='target'; ID='10.20.30.51'}
[pscustomobject]@{Site='hm'; ID='10.20.30.60'}
)

$Object=New-Object PSObject

$Array | group Site | %{

#create an new list with all id for the curretn group
$CurrentList = New-Object System.Collections.Generic.List[System.Object]
$_.group.ID | %{$CurrentList.Add($_)}

#Add property and list to the final object
Add-Member Noteproperty -Name $_.Name -value $CurrentList -InputObject $Object
}

#add element to a site
$Object.hm.Add("NewID")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...