Добавление одной хеш-таблицы в другую на основе общего значения - PullRequest
0 голосов
/ 05 января 2019

Windows имеет две команды PowerShell для получения информации о дисках Get-PhysicalDisk и Get-Disk.

Я выполняю команду Get-PhysicalDisk и затем пытаюсь добавить вывод команды с результатом из Get-Disk, используя общее значение, которое существует в выходных данных обеих команд, это значение SerialNumber.

Я убежден, что это простое требование к хеш-таблице, я не могу обернуть его вокруг.

$PhysicalDisks = Get-PhysicalDisk |
                 Select OperationalStatus, HealthStatus, BusType, FriendlyName,
                     Manufacturer, SerialNumber
foreach ($Disk in $PhysicalDisks) {
    $AdditionalDiskInfo = Get-Disk |
                          Where SerialNumber -eq $_.SerialNumber |
                          select PartitionStyle, ProvisioningType,
                              NumberOfPartitions, Signature

    # I know this isn't anywhere near correct, I'm just trying to explain my
    # end goal :)
    #$PhysicalDisks + $AdditionalDiskInfo |
    #    Where $PhysicalDisks.SerialNumber -eq $AdditionalDiskInfo.SerialNumber
}

Мой ожидаемый результат будет сочетанием этого:

PS> Get-PhysicalDisk | Select OperationalStatus, HealthStatus, BusType,                     
FriendlyName, Manufacturer, SerialNumber
OperationalStatus : OK
HealthStatus      : Healthy
BusType           : SATA
FriendlyName      : KINGSTON SV310S37A960G
Manufacturer      : 
SerialNumber      : 50026B724800A34E

и это:

PS> Get-Disk | Where SerialNumber -eq "50026B724800A34E" | select PartitionStyle, ProvisioningType, NumberOfPartitions, Signature | Format-list
PartitionStyle     : MBR
ProvisioningType   : Fixed
NumberOfPartitions : 2
Signature          : 1364200743

чтобы дать мне это:

OperationalStatus : OK
HealthStatus      : Healthy
BusType           : SATA
FriendlyName      : KINGSTON SV310S37A960G
Manufacturer      : 
SerialNumber      : 50026B724800A34E
PartitionStyle    : MBR
ProvisioningType  : Fixed
NumberOfPartitions: 2
Signature         : 1364200743

1 Ответ

0 голосов
/ 05 января 2019

Вы можете создавать собственные объекты в цикле следующим образом:

foreach ($Disk in $PhysicalDisks) {
    $info = Get-Disk |
            Where-Object { $Disk.SerialNumber -eq $_.SerialNumber.Trim() }

    New-Object -Type PSObject -Property @{
        'OperationalStatus'  = $Disk.OperationalStatus
        'HealthStatus'       = $Disk.HealthStatus
        'BusType'            = $Disk.BusType
        'FriendlyName'       = $Disk.FriendlyName
        'Manufacturer'       = $Disk.Manufacturer
        'SerialNumber'       = $Disk.SerialNumber
        'PartitionStyle'     = $info.PartitionStyle
        'ProvisioningType'   = $info.ProvisioningType
        'NumberOfPartitions' = $info.NumberOfPartitions
        'Signature'          = $info.Signature
    }
}

Однако, вероятно, было бы проще создать серийные номера отображения хеш-таблицы для данных Get-Disk, а затем добавить соответствующую информацию в качестве вычисляемых свойств, где вы просматриваете информацию по серийному номеру.

$info = @{}
Get-Disk | ForEach-Object {
    $info[$_.SerialNumber.Trim()] = $_
}

Get-PhysicalDisk |
    Select-Object OperationalStatus, HealthStatus, BusType, FriendlyName,
        Manufacturer, SerialNumber,
        @{n='PartitionStyle';e={$info[$_.SerialNumber].PartitionStyle}},
        @{n='ProvisioningType';e={$info[$_.SerialNumber].ProvisioningType}},
        @{n='NumberOfPartitions';e={$info[$_.SerialNumber].NumberOfPartitions}},
        @{n='Signature';e={$info[$_.SerialNumber].Signature}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...