我创建了以下对象:
$PSOhash = @{
ConnectedNode = $ConnectedNode
ConnectedNodeDeviceNumber = $ConnectedNodeDeviceNumber
Serialnumber = $Serialnumber
ProductId = $ProductId
}
$ClusterNodeSSDs = New-Object PSObject -Property $PSOhash
,并希望将以下命令中的值添加到其中:
$SSDModel = "xyz123"
$ClusterNode = "Node1"
gwmi -Namespace root\wmi ClusPortDeviceInformation| select ConnectedNode,ConnectedNodeDeviceNumber, Serialnumber, ProductId | sort ConnectedNodeDeviceNumber | where {($_.ConnectedNode -eq $ClusterNode) -and ($_.ProductId -match "$SSDModel")}
返回正确的信息,但需要将它们作为对象中的属性进行进一步处理。
答案 0 :(得分:1)
如果要将一组属性值对添加到一个已经不存在的PSObject(在此示例中为$MyObject
), 当前没有这些属性 ,您可以为此使用Add-Member命令:
$PSOhash = @{
ConnectedNode = $ConnectedNode
ConnectedNodeDeviceNumber = $ConnectedNodeDeviceNumber
Serialnumber = $Serialnumber
ProductId = $ProductId
}
$MyObject = $MyObject | Add-Member -NotePropertyMembers $PSOHash
说明:
通过-NotePropertyMembers
参数,您可以将属性值对的哈希表添加到自定义对象。
(可选)您可以结合使用Add-Member
的{{1}}和-NotePropertyValue
一次添加一个属性。
如果要使用另一个对象的属性值(相同的属性名称)更新一个对象的属性值,则可以使用直接分配和成员访问运算符(-NotePropertyName
)。
.
说明:
请注意此处使用$SSDModel = "xyz123"
$ClusterNode = "Node1"
$WmiObjects = Get-WmiObject -Namespace root\wmi ClusPortDeviceInformation |
Select-Object ConnectedNode,ConnectedNodeDeviceNumber, Serialnumber, ProductId |
Sort-Object ConnectedNodeDeviceNumber |
where {($_.ConnectedNode -eq $ClusterNode) -and ($_.ProductId -match "$SSDModel")}
$ClusterNodeSSDs = foreach ($WmiObject in $WmiObjects) {
$PSOhash = @{
ConnectedNode = $WmiObject.ConnectedNode
ConnectedNodeDeviceNumber = $WmiObject.ConnectedNodeDeviceNumber
Serialnumber = $WmiObject.Serialnumber
ProductId = $WmiObject.ProductId
}
[pscustomobject]$PSOhash
}
循环,因为foreach
可能会返回一个集合。因此,您将需要迭代所有这些对象以创建自定义对象。但是,似乎您只能使用Get-WmiObject
输出来执行相同的操作。