Out-GridView返回完整对象,同时仅显示选定的属性

时间:2019-02-18 05:06:57

标签: powershell

我有一个哈希表数组要处理,需要用户选择一个或多个哈希表以进行进一步处理。我可以使GridView正确显示它们,但是我只需要显示3个或4个属性,这些属性将允许最终用户选择正确的条目并隐藏其余的条目。

返回的对象应该是整个哈希表。

$t = @{}
$t.Name = "Test"
$t.URL = "http://xxx.test"
$t.Type = "UAT" 
$RptServers = ,$t

$p = @{}
$p.Name = "Prod-MEL"
$p.URL = "http://xxx.Prod"
$p.Type = "PROD" 
$RptServers += $p

$selectedSSRS = $RptServers | ForEach-Object { [PSCustomObject]$_ | Select-Object -Property 'Name','Type' } | Out-GridView -Title "Select Report Server(s)" -PassThru
$selectedSSRS

如果用户选择“测试”,则返回的对象具有以下属性:

Name Type
---- ----
Test UAT

但是我希望整个对象都带有URL等

2 个答案:

答案 0 :(得分:0)

将脚本的最后两行更改为以下三行:

$selectedSSRS = $RptServers | ForEach-Object { [PSCustomObject]$_ }    
$selectedSSRS | Select-Object -Property 'Name','Type' | Out-GridView -Title "Select Report Server(s)" 
$selectedSSRS

“选择对象”过滤器仅在此处的gridview上有效,而$ selectedSSRS具有所有属性

答案 1 :(得分:0)

所以我认为我找到了一个可能的解决方案,但是它不是很优雅,更喜欢“单线”

$temp = $RptServers | ForEach-Object { $_ | Select-Object -Property 'Name','Type' } | Out-GridView -Title "Select Report Server(s)" -PassThru
$selectedSSRS = $RptServers | Where-Object { $_.Name -in $temp.Name }
$selectedSSRS

Where-Object子句将需要在实际代码中进行调整,因为仅Name可能不够唯一,以确保仅将正确的条目添加到所选列表中