PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Ответить
Аватара пользователя
rudimko

PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение rudimko »

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

Re: PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение rudimko »

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



Код:

Код: Выделить всё

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

Re: PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение rudimko »

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



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



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





Код:

Код: Выделить всё

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

Re: PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение Kazun »

Код:

Код: Выделить всё

$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

Re: PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение rudimko »

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



К примеру вывожу переменную: $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

Re: PowerShell - [решено] Создание переменной (коллекции) с несколькими значениями

Сообщение 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
	}
}
Ответить

Вернуться в «Скриптовые языки администрирования Windows»