无法让Out-GridView显示两个对象

时间:2018-03-16 11:46:57

标签: powershell

我有两个物品$ A& $ B,每个包含CSV导入。 在两个对象中,存在两个共享相同属性名称(DisplayName& LoginName)的列。首先,我希望将这些内容组合在一起,并在我的脚本中的某些位置将它们传递给Out-GridView

不幸的是,我似乎无法找到办法。

$A = Import-csv -Path "C:\Users\[...]" | Where-Object {$_.LoginName -like "*[...]*"} | Sort DisplayName
$B = Import-csv -Path "C:\Users\[...]" | Where-Object {$_.LoginName -like "*[...]*"} | Sort DisplayName

$displayNames = ($A.DisplayName) + ($B.DisplayName)
$loginNames = ($A.UserPrincipalName) + ($B.LoginName)

现在,此时我无法同时使用$displayNames$loginNames,同时将它们传输到Out-GridView

我在考虑将这两个对象组合在一起,但是$displayNames + $loginNames会导致一个对象没有维护这两个属性。

然后我想我可以像这样创建一个pscustomobject:

$combined = [pscustomobject] @{
DisplayNames = $displayNames
LoginNames = $loginNames
}

但是,如果我将其传输到Out-GridView,它会向我显示两列DisplayNamesLoginNames,但所有值都在一个数组中,因此输出只会显示一行

然后我尝试将两个数组转换为字符串,如下所示:

$combined = [pscustomobject] @{
DisplayNames = ($displayNames | Out-String)
LoginNames = ($loginNames | Out-String)
}

这一次,我快到了。 Out-GridView确实显示了两列中的扩展值。不幸的是,他们不能再用鼠标选择了。

这就是它的样子:

enter image description here

我应该做些什么?

2 个答案:

答案 0 :(得分:1)

这可能对您有用:

$displayNames = @('aaa','bbb','ccc'); 
$loginNames=@('xxx','yyy','zzz'); 
($displayNames | select @{n='NameType';e={'display'}},@{n='Name';e={$_}}) + 
($loginNames | select @{n='NameType';e={'login'}},@{n='Name';e={$_}}) | 
Out-GridView

enter image description here

答案 1 :(得分:1)

使用psobject而不是使用两个数组以及对它们进行排序并尝试将它们保持同步的所有废话,而是使用psobject来将第二个文件结果附加到第一个。像这样:

$results = Import-csv -Path "C:\Users\[...]" | Where-Object {$_.LoginName -like "*[...]*"} | % {
  New-Object psobject -Property @{
    DisplayName = $_.DisplayName
    LoginName = $_.UserPrincipalName
  }
}

$results += Import-csv -Path "C:\Users\[...]" | Where-Object {$_.LoginName -like "*[...]*"} | % {
  New-Object psobject -Property @{
    DisplayName = $_.DisplayName
    LoginName = $_.LoginName
  }
}

$results | Out-GridView