Объединить переменные в один объект - PullRequest
0 голосов
/ 28 января 2020

У меня есть несколько переменных, содержащих информацию о моих серверах. Например,

PS Z:\Powershell-Scripts> $AllRam

Computername RAM
------------ ---
ServerA      14.00
ServerB      80.00
ServerC      64.00
ServerD      48.00
ServerE      72.00


PS Z:\Powershell-Scripts> $AllProcessor

ComputerName ProcessorCount LogicalProcessors
------------ -------------- -----------------
ServerA                   2                 4
ServerB                   2                32
ServerC                   2                24
ServerD                   1                12
ServerE                   2                24

У меня есть около 10 переменных, содержащих различную информацию.

Теперь я хотел бы объединить их, чтобы у меня была одна большая переменная со всей информацией. Таким образом, приведенный выше пример должен выглядеть примерно так:

ComputerName ProcessorCount LogicalProcessors RAM
------------ -------------- ----------------- ---
ServerA                   2                 4 14.00
ServerB                   2                32 80.00
ServerC                   2                24 64.00
ServerD                   1                12 48.00
ServerE                   2                24 72.00

Как мне этого добиться? Столбец ComputerName существует во всех переменных, а все серверы существуют во всех переменных.

1 Ответ

0 голосов
/ 28 января 2020

Вот один из способов сделать это.

Foreach ($item in $AllProcessor) {
    $RamItem = $AllRam.Where({$_.ComputerName -eq $item.ComputerName},'first')
    Add-Member -MemberType NoteProperty -Name 'RAM' -Value $RamItem.Ram -InputObject $item
}

Вот еще один вариант, если вам нужно создать новый объект без изменения существующего.

$ALLItems = Foreach ($item in $AllProcessor) {
    $RamItem = $AllRam.Where( { $_.ComputerName -eq $item.ComputerName }, 'first')

    [PSCustomObject]@{
        ComputerName     = $item.ComputerName
        ProcessorCount   = $item.ProcessorCount
        LogicalProcessor = $item.LogicalProcessor
        Ram              = $RamItem.Ram
    }

}

Результат enter image description here

Данные, использованные для справки

    $AllRam = @(
    [PSCustomObject]@{ComputerName = 'ServerA'; RAM = '14.00' }
    [PSCustomObject]@{ComputerName = 'ServerB'; RAM = '80.00' }
    [PSCustomObject]@{ComputerName = 'ServerC'; RAM = '64.00' }
    [PSCustomObject]@{ComputerName = 'ServerD'; RAM = '48.00' }
    [PSCustomObject]@{ComputerName = 'ServerE'; RAM = '72.00' }
)

$AllProcessor = @(
    [PSCustomObject]@{ComputerName = 'ServerA'; ProcessorCount = 2; LogicalProcessor = 4 }
    [PSCustomObject]@{ComputerName = 'ServerB'; ProcessorCount = 2; LogicalProcessor = 32 }
    [PSCustomObject]@{ComputerName = 'ServerC'; ProcessorCount = 2; LogicalProcessor = 24 }
    [PSCustomObject]@{ComputerName = 'ServerD'; ProcessorCount = 1; LogicalProcessor = 12 }
    [PSCustomObject]@{ComputerName = 'ServerE'; ProcessorCount = 2; LogicalProcessor = 24 }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...