从其他PS命令向PS对象添加值

问题描述 投票:0回答:1

我创建了以下对象:

$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")}

返回正确的信息,但需要将它们作为对象中的属性进行进一步处理。

powershell
1个回答
1
投票

如果要将一组属性-值对添加到一个已经存在的PSObject(在此示例中为$MyObject当前不具有这些属性,则可以使用Add-Member命令:

$PSOhash = @{
    ConnectedNode = $ConnectedNode
    ConnectedNodeDeviceNumber = $ConnectedNodeDeviceNumber
    Serialnumber = $Serialnumber
    ProductId = $ProductId
    }
$MyObject = $MyObject | Add-Member -NotePropertyMembers $PSOHash

说明:

-NotePropertyMembers参数允许您将属性值对的哈希表添加到自定义对象。

可选,您可以组合使用Add-Member-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可能会返回一个集合。因此,您将需要迭代所有这些对象以创建自定义对象。但是,似乎您只可以使用Get-WmiObject | Select-Object输出执行相同的操作。

© www.soinside.com 2019 - 2024. All rights reserved.