仅过去 select 个字段到 out-gridview

Past only select fields to out-gridview

我怎样才能只传递一个对象的 selection 字段以显示在 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。在用户 selects 所需的行之后,我希望再次将结果作为相同类型的对象。

当我使用 select-object 时,

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

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

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

您需要在 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
    }
}

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