Powershell 从其他PS命令向PS对象添加值
我创建了以下对象:Powershell 从其他PS命令向PS对象添加值,powershell,Powershell,我创建了以下对象: $PSOhash = @{ ConnectedNode = $ConnectedNode ConnectedNodeDeviceNumber = $ConnectedNodeDeviceNumber Serialnumber = $Serialnumber ProductId = $ProductId } $ClusterNodeSSDs = New-Object PSObject -Property $PSOhash 并希望将以下
$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")}
它返回正确的信息,但需要将其作为对象中的属性进行进一步处理。如果要将一组属性值对添加到本例中已存在的PSObject$MyObject中,而该PSObject当前没有这些属性,可以使用以下命令:
$PSOhash = @{
ConnectedNode = $ConnectedNode
ConnectedNodeDeviceNumber = $ConnectedNodeDeviceNumber
Serialnumber = $Serialnumber
ProductId = $ProductId
}
$MyObject = $MyObject | Add-Member -NotePropertyMembers $PSOHash
说明:
-NotePropertyMembers参数允许您向自定义对象添加属性值对的哈希表
或者,您可以使用Add成员的-NotePropertyValue和-NotePropertyName的组合一次添加一个属性
如果要使用另一个对象的相同属性名称的属性值更新一个对象的属性值,可以使用直接赋值和成员访问操作符
说明:
注意这里使用的foreach循环,因为Get WmiObject可能会返回一个集合。因此,您需要迭代所有这些对象来创建自定义对象。但是,似乎您可以使用Get WmiObject | Select Object output执行相同的操作。将$WmiObject中的$WmiObject更改为$WmiObjects中的$WmiObject,并在末尾添加了}。这帮助我完成了剧本。
$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
}