0

我正在尝试使用来自另一个对象的数据输入创建一个新的自定义对象。

$clusters = Get-EMRClusters 
$runningclusters = $clusters | Where-Object {
    $_.Status.State -eq "Running" -or
    $_.Status.State -eq "Waiting"
}

$runningclusters好像

身份证姓名状态
-- ---- ------
j-12345 cluster1 正在运行
j-4567 cluster2 正在运行

我想创建一个新的 PSobject $o,其中第 4 列名为PendingShutdown布尔值。

id 名称 状态 pendingshutdown
-- ---- ------ ---------------
j-12345 cluster1 运行 False
j-4567 cluster2 运行 False

我试过运行这个:

$o = New-Object PSObject
$o | Add-Member -NotePropertyName id -NotePropertyValue $runningclusters.id
$o | Add-Member -NotePropertyName name -NotePropertyValue $runningclusters.name
$o | Add-Member -NotePropertyName status -NotePropertyValue $runningclusters.status.state
$o | Add-Member -NotePropertyName PendingShutdown -NotePropertyValue $true

但我$o的列输出只是对象本身,idname不是 ID 行。如何使对象看起来像上面我想要的对象?

4

2 回答 2

2

您需要遍历每个集群对象。您可以遍历它们并将列添加到当前对象,例如:

$runningclusters = $clusters |
Where-Object {$_.Status.State -eq "Running" -or $_.Status.State -eq "Waiting"} |
Add-Member -NotePropertyName pendingshutdown -NotePropertyValue $true -PassThru

或者您可以为每个集群创建新对象。前任:

$MyNewClusterObjects = $runningclusters | ForEach-Object {
    New-Object -TypeName psobject -Property @{
        id = $_.id
        name = $_.name
        status = $_.status.state
        PendingShutdown = $true
    }
}
于 2017-03-19T18:57:32.930 回答
2

只需使用计算属性为管道中的对象添加属性,例如:

$runningclusters = $clusters | Where-Object {
    $_.Status.State -eq "Running" -or
    $_.Status.State -eq "Waiting"
} | Select-Object *,@{n='PendingShutdown';e={$false}}
于 2017-03-19T19:02:12.507 回答