Показать полную графическую версию : [решено] Создание переменной (коллекции) с несколькими значениями
Друзья, подскажите, как создать переменную с несколькими значениями, что бы их было 4-5 или больше? Умею создавать только хэштейбл ($var = @{a=1;b=2;}), но там только (2 значения) Name и Value... Спасибо.
Вопрос непонятен. Если требуется создать объект с заданными свойствами, то можно воспользоваться например(так методов много):
1)
$Object = New-Object PSObject
$Object | add-member Noteproperty a1 1
$Object | add-member Noteproperty a2 2
$Object | add-member Noteproperty a3 3
$Object | add-member Noteproperty a4 4
$Object | add-member Noteproperty a5 5
2)
$Object = New-Object PSObject -Property @{
a1 = 1
a2 = 2
a3 = 3
a4 = 5
a5 = 5
}
3)
$Object = "" | Select @{n="a1";e={1}},@{n="a2";e={2}},@{n="a3";e={3}},@{n="a4";e={4}},@{n="a5";e={5}}
4) Для PowerShell v3 и выше:
$Object = [pscustomobject]@{a1=1; a2=2; a3=3; a4=4; a5=5}
https://social.technet.microsoft.com/wiki/contents/articles/7804.powershell-creating-custom-objects.aspx
Прошу прощения за тавтологию...
Хочу немного другого результата добиться:
Допустим выполняется цикл в котором создаются переменные и им присваиваются определенные значения:
foreach ($connection in $connections)
{
$SessionID = $connection.SessionID
$infoBase = $connection.infoBase.Name
$MemorySize = $connection.process.MemorySize
$processPID = $connection.process.PID
}
Каждый раз в цикле данным переменным будут присваиваться разные значения.
Мне необходимо создать одну переменную, которая сможет в себе сохранить параметры этих переменных из всего цикла, то есть переменная должна иметь примерно вот такой вид - Name = $SessionID Param1 = $InfoBase Param2 = $MemorySize Param3 = $processPID
Типа такой структуры в переменной:
Name | Param1 | Param2 | Param3
Выглядить в целом примерно так:
Name1 | Base1 | 4123123 | 4321
Name2 | Base2 | 4123123 | 4321
Name3 | Base3 | 4456763 | 6479
...
Моих знаний хватает лишь на 2 значения ;)) например $collection += @{$SessionID = $infoBase;}, вот бы добавить сюда еще 2 нужных ;)
Я так понимаю нужно как-то плюсовать значения переменной в цикле, но как вот построить такую структуру, возможно ли?
$con = @()
foreach ($connection in $connections)
{
$con += New-Object PSObject -Property @{
SessionID = $connection.SessionI
infoBase = $connection.infoBase.Name
MemorySize = $connection.process.MemorySize
processPID = $connection.process.PID
}
}
Здорово, но есть затык небольшой...
К примеру вывожу переменную: $con | format-list
5860620 : 8132860
4972 : 4940
3222 : 3615
V8_BASE_1 : V8_BASE_2
5860620 : 8132860
4972 : 4940
3222 : 31464
V8_BASE_1 : V8_BASE_3
5860620 : 8132860
4972 : 4940
3222 : 28400
V8_BASE_1 : V8_BASE_3
и тд....
Как задать названия для заголовков правильно? Написал до цикла:
$con += New-Object PSObject -Property @{
$nameSessionID = "SessionID"
$nameInfoBase = "InfoBase"
$nameMemorySize = "MemorySize"
$nameProcessPID = "ProcessPID"
}
Заголовки появились, но первым значением в коллекции переменной идут значения из заголовков, только потом полезные данные.
infoBase : infoBase
processPID : processPID
MemorySize : MemorySize
SessionID : SessionID
infoBase : BASE_4
processPID : 5012
MemorySize : 6979204
SessionID : 3425
Еще вопрос... Можно ли как-то объединить данные в этой переменной, как бы слить, например:
есть несколько одинаковых значений "ProcessPID" и "MemorySize", но значения "InfoBase" и "SessionID" разные, можно ли соединить их? Ну например значение "ProcessPID" и "MemorySize" останется таким же, а "InfoBase" будет сливаться (добавляться) - "V8_BASE_1, V8_BASE_2", так же и "SessionID" - "3615, 107653"
Например, что бы выглядело не так:
infoBase : BASE_4
processPID : 5012
MemorySize : 6979204
SessionID : 3425
infoBase : BASE_1
processPID : 5012
MemorySize : 6979204
SessionID : 7296
infoBase : BASE_3
processPID : 4972
MemorySize : 6381188
SessionID : 107076
infoBase : BASE_2
processPID : 4972
MemorySize : 6381188
SessionID : 8582
infoBase : BASE_1
processPID : 4972
MemorySize : 6381188
SessionID : 1875
infoBase : BASE_1
processPID : 4972
MemorySize : 6381188
SessionID : 1890
А вот так:
infoBase : BASE_4, BASE_1
processPID : 5012
MemorySize : 6979204
SessionID : 3425, 7296
infoBase : BASE_3, BASE_2, BASE_1
processPID : 4972
MemorySize : 6381188
SessionID : 107076, 8582, 1875, 1890
Kazun, спасибо, хэлп.
"Название Свойства" = Значение
Я же привел пример выше уже.
$con += New-Object PSObject -Property @{
"SessionID" = $nameSessionID
"InfoBase" = $nameInfoBase
"MemorySize" = $nameMemorySize
"ProcessPID" = $nameProcessPID
}
Можно и сгруппировать:
$con = $con | group ProcessPID | Foreach {
if($_.Count -gt 1) {
New-Object PSObject -Property @{
"SessionID" = ($_.Group | Foreach {$_.SessionID}) -join ","
"InfoBase" = ($_.Group | Foreach {$_.InfoBase}) -join ","
"MemorySize" = ($_.Group | Foreach {$_.MemorySize}) -join ","
"ProcessPID" = $_.Name
}
}
else {
$_.Group
}
}
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.