根据共同值将一个哈希值 table 添加到另一个哈希值
Adding one hash table to another based on a common value
Windows 有两个 PowerShell 命令用于获取有关磁盘 Get-PhysicalDisk
和 Get-Disk
.
的信息
I 运行 命令 Get-PhysicalDisk
然后尝试使用两个命令的输出中存在的公共值将命令的输出附加到 Get-Disk
的结果,这个值为 SerialNumber
.
我确信这是一个简单的哈希 table 要求,我无法理解它。
$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> 获取物理磁盘 | Select OperationalStatus、HealthStatus、BusType、
友好名称、制造商、序列号
运行状态:OK
健康状况:健康
总线类型:SATA
友情名称:KINGSTON SV310S37A960G
制造商 :
序列号:50026B724800A34E
还有这个:
PS> 获取磁盘 |其中 SerialNumber -eq "50026B724800A34E" | select PartitionStyle、ProvisioningType、NumberOfPartitions、签名 |格式列表
分区类型:MBR
配置类型:固定
分区数:2
签字:1364200743
给我这个:
运行状态:OK
健康状况:健康
总线类型:SATA
友情名称:KINGSTON SV310S37A960G
制造商 :
序列号:50026B724800A34E
分区类型:MBR
配置类型:固定
分区数:2
签字:1364200743
您可以像这样在循环中构建自定义对象:
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}}
Windows 有两个 PowerShell 命令用于获取有关磁盘 Get-PhysicalDisk
和 Get-Disk
.
I 运行 命令 Get-PhysicalDisk
然后尝试使用两个命令的输出中存在的公共值将命令的输出附加到 Get-Disk
的结果,这个值为 SerialNumber
.
我确信这是一个简单的哈希 table 要求,我无法理解它。
$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> 获取物理磁盘 | Select OperationalStatus、HealthStatus、BusType、 友好名称、制造商、序列号 运行状态:OK 健康状况:健康 总线类型:SATA 友情名称:KINGSTON SV310S37A960G 制造商 : 序列号:50026B724800A34E
还有这个:
PS> 获取磁盘 |其中 SerialNumber -eq "50026B724800A34E" | select PartitionStyle、ProvisioningType、NumberOfPartitions、签名 |格式列表 分区类型:MBR 配置类型:固定 分区数:2 签字:1364200743
给我这个:
运行状态:OK 健康状况:健康 总线类型:SATA 友情名称:KINGSTON SV310S37A960G 制造商 : 序列号:50026B724800A34E 分区类型:MBR 配置类型:固定 分区数:2 签字:1364200743
您可以像这样在循环中构建自定义对象:
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}}