Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание переменной (коллекции) с несколькими значениями (http://forum.oszone.net/showthread.php?t=275879)

rudimko 16-01-2014 10:20 2290097

Создание переменной (коллекции) с несколькими значениями
 
Друзья, подскажите, как создать переменную с несколькими значениями, что бы их было 4-5 или больше? Умею создавать только хэштейбл ($var = @{a=1;b=2;}), но там только (2 значения) Name и Value... Спасибо.

Kazun 16-01-2014 10:58 2290116

Вопрос непонятен. Если требуется создать объект с заданными свойствами, то можно воспользоваться например(так методов много):
Код:

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...m-objects.aspx

rudimko 16-01-2014 12:03 2290137

Прошу прощения за тавтологию...

Хочу немного другого результата добиться:

Допустим выполняется цикл в котором создаются переменные и им присваиваются определенные значения:

Код:

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 нужных ;)

Я так понимаю нужно как-то плюсовать значения переменной в цикле, но как вот построить такую структуру, возможно ли?

Kazun 16-01-2014 12:55 2290161

Код:

$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
        }
}


rudimko 16-01-2014 14:01 2290194

Здорово, но есть затык небольшой...

К примеру вывожу переменную: $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, спасибо, хэлп.

Kazun 16-01-2014 15:08 2290259

"Название Свойства" = Значение

Я же привел пример выше уже.

Код:

$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
        }
}



Время: 10:14.

Время: 10:14.
© OSzone.net 2001-