arrays - PowerShell-使用不同的键创建哈希表数组

标签 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上“写入主机$ 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/

相关文章:

arrays - Go语言中的循环数组

javascript - DOM 结构到数组

java - 如何清除一个变量(数组列表列表)而不无意中清除另一个变量?

IIS使用脚本切换路径

powershell - 如何使用 Powershell 跨卷移动文件/文件夹?

azure - 非管理员的图形 API 权限

jakarta-ee - Tomcat、HTTP 身份验证和 Active Directory

java - 大海捞针阵列针

powershell - 为用户返回管理员 saccountname

c# - 以编程方式安装证书吊销列表 (CRL)