是否可以输出具有不同键的哈希表数组?
我的实验代码如下:
$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上“写入主机$ OutArray”时,您可以看到键和值。
最终,我尝试将ADUser帐户列表导出到CSV,但是有问题的ADUser对象并不总是具有所有属性。似乎数组的第一个元素将设置“标题”是什么,然后排除其他键的显示,第一个元素可能没有。
有任何想法吗?
最佳答案
您可以做的是将所有缺少的属性添加到第一项。首先,我们获得所有潜在的属性:
$AllProps = $OutArray |%{$_.PSObject.Properties.Name} |Select -Unique
然后我们将丢失的添加到数组的第一项。
$AllProps |?{$_ -notin $OutArray[0].PSObject.Properties.Name} |%{Add-Member -InputObject $OutArray[0] -NotepropertyName $_ -NotePropertyValue ''}
然后,我们可以显示数组,将其通过管道传输到CSV或任何我们想要的东西,它将表现良好。
编辑:正如Frode F.指出的那样,我们不必将属性添加到第一个对象即可使PowerShell为所有对象输出这些属性。我们可以简单地使用
Select-Object
并告诉它要显示的属性,这将解决问题。$AllProps = $OutArray |%{$_.PSObject.Properties.Name} |Select -Unique
$OutArray | Select $AllProps
您必须明确一点,因为使用
Select *
的行为与上述行为不同。
关于arrays - PowerShell-使用不同的键创建哈希表数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49204095/