PowerShell - 使用不同的密钥创建哈希表数组

时间:2018-03-10 00:28:50

标签: arrays powershell active-directory hashtable

是否可以输出具有不同密钥的哈希表数组?

我的实验代码如下:

$object1 = New-Object psobject -Property @{key1 = "Yep";
key3 = "Sure!"}

$object2 = New-Object psobject -Property @{key2 = "Yep";
key3 = "Sure!"}

$object3 = New-Object psobject -Property @{key1 = "Yep";
key2 = "Yep";
key3 = "Yep"}

Write-Host "Object 1 First"
$OutArray = @()
$OutArray += $object1
$OutArray += $object2

$OutArray

Write-Host "Object 2 First"
$OutArray = @()
$OutArray += $object2
$OutArray += $object1

$OutArray

Write-Host "Object 3 First"
$OutArray = @()
$OutArray += $object3
$OutArray += $object2
$OutArray += $object1

$OutArray

好像它们存储在内存中,因为当你首先在对象1或2上“Write-Host $ OutArray”时,你可以看到键和值。

最终,我正在尝试将ADUser帐户列表导出为CSV,但有问题的ADUser对象并不总是具有所有属性。似乎数组的第一个元素将设置'标题'是什么,然后排除显示其他键,第一个元素可能没有。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以做的是将所有缺少的属性添加到第一个项目。首先,我们获得所有潜在的属性:

$AllProps |?{$_ -notin $OutArray[0].PSObject.Properties.Name} |%{Add-Member -InputObject $OutArray[0] -NotepropertyName $_ -NotePropertyValue ''}

然后我们将缺少的那些添加到数组中的第一个项目。

Select-Object

然后我们可以显示数组,将其传输到CSV或任何我们想要的东西,它会表现得很好。

编辑正如Frode F.指出的那样,我们不必将属性添加到第一个对象,以使PowerShell为所有对象输出这些属性。我们可以简单地使用$AllProps = $OutArray |%{$_.PSObject.Properties.Name} |Select -Unique $OutArray | Select $AllProps 并告诉它要显示哪些属性,这将解决问题。

Select *

您必须具体,因为使用Auth的行为与上述行为不同。