0

我怎样才能只从一个对象中选择一个字段来显示在 out-gridview 中,但仍然保留整个对象作为结果。

例如,我检索一个对象,它给了我:

$listcreds = get-listofcredentials

Id                    : 03c0e0c0-0951-4698-9ba9-a70508b5467f
IsLocalProtect        : True
Name                  : vsphere.local\Administrator
CurrentUser           : False
UserName              : vsphere.local\Administrator
UserNameAtNotation    : Administrator@vsphere.local
UserNameSlashNotation : vsphere.local\Administrator
UserNameOnly          : Administrator
DomainName            : vsphere.local
EncryptedPassword     : Veeam.Backup.Common.CCodedPassword

在网格视图中,我只想查看名称和 ID。用户选择所需的行后,我希望再次将结果作为相同类型的对象。

当我使用选择对象时,

$selectedcred = $listofcredentials | select-object Name, Id | out-gridview -passthru

我得到了结果,但我现在必须再次搜索原始对象以获取该行的其他属性。

有什么更好的方法来做到这一点?

4

1 回答 1

1

您需要在列表中再次找到完整的对象Where-Object

此答案假定该Id属性对于中的每个项目都是唯一的$listcreds

$listcreds = get-listofcredentials
$selectedcred = $listofcredentials | select-object Name, Id | out-gridview -passthru
$selectedcred = $listcreds | Where-Object {$_.Id -eq $selectedcred.Id}

我认为这里没有更好的解决方案。如果性能是一个问题,您可以将其Where-Object转换foreach为如下:

$listcreds = get-listofcredentials
$selectedcred = $listofcredentials | select-object Name, Id | out-gridview -passthru

foreach ($cred in $listcreds) {
    if ($cred.Id -eq $selectedcred.Id) {
        $selectedcred = $cred
        break
    }
}

但是,性能差异可能可以忽略不计,甚至是负面的。

于 2021-09-23T16:45:41.727 回答