Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 从其他PS命令向PS对象添加值_Powershell - Fatal编程技术网

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
}