Powershell. Использование многомерных массивов для хранения данных. Требуется предложение - PullRequest
2 голосов
/ 08 февраля 2011

Я уже некоторое время гуглю, но не нашел решения своей проблемы. Я должен сказать, что я новичок в Powershell.

Я хотел бы создать следующий массив $ a = (A, B, C, D) где A = 1 строка (всегда) B = 1 строка (всегда) C = неопределенное количество строк. Мне нужно иметь возможность добавлять элементы динамически D = неопределенное количество строк. Мне нужно иметь возможность добавлять элементы динамически (тот же номер, что и C)

Возможно ли это? Пример 2 элементов массива

  1. ("WSTM0123456", "192.168.10.155", ("WSTM8765421", "WSTM9856454", "WSTM1289765"), ("192.36.36.36", "187.25.25.25", "192.69.89.65") )

  2. ("WLDN1251254", "156.25.36.54", ("WLDN1234512", "WLDN9865323"), ("187.154.12.12", "163.136.25.98"))

Я не знаю априори, сколько элементов будет в C и D, и мне придется добавлять строки в позиции C и D с помощью цикла for.

Область действия: сгруппировать множество строк (C & D) в одну общую строку (A / B).

Любая помощь будет оценена

Спасибо, Marco

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Вы можете сделать это, но это, вероятно, довольно болезненно, так как работа с массивами в PowerShell иногда бывает громоздкой из-за большого количества неявных сглаживаний.

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

$properties = @{
  Name = 'WSTM0123456';
  IP = [ipaddress]'192.168.10.155';
  ListOfNames = @("WSTM8765421","WSTM9856454","WSTM1289765");
  ListOfIPs = [ipaddress[]]@("192.36.36.36", "187.25.25.25","192.69.89.65")
}

$foo = New-Object PSObject -Property @properties

Тогда вы можете просто добавить новые элементы, например, так:

$foo.ListOfNames += 'AnotherName'
0 голосов
/ 09 февраля 2011

Я думаю, что это почти та же идея.Используйте хэш-таблицу и создайте два массива элементов.Вот как вы могли бы создавать массивы «на лету» во время выполнения, не зная, каким будет какое-либо содержимое заранее, взяв $ x и поместив любой элемент, начинающийся с «t» в «C», и всееще в "D":

 $a = @{A = "Some string";B = "Some other string"}

 $x = "one","two","three","four","five"

 $x |% {
     if ($_ -match "^t"){$a["C"] += @($_)}
     else {$a["D"] += @($_)}
     }

 $a.a
 Some string

 $a.b
 Some other string

 $a.c
 two
 three


 $a.d
 one
 four
 five


$obj = new-object psobject -property $a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...