如何使用 GetEnumerator() 将散列 table 导出到 PowerShell 中的 csv 文件?

How to use GetEnumerator() to export hash table to a csv file in PowerShell?

我写了一个搜索功能,搜索一些活动目录属性。我现在想将内容导出到 .csv 文件。如果我没看错的话,整个输出是一个散列table。但是当我尝试使用 GetEnumerator() 函数时,它什么也没做。

有人可以帮忙解释一下我做错了什么吗?代码如下。提前致谢!

Import-Module ActiveDirectory
$users = Get-ADUser -Filter { employeeNumber -notlike '*' } -Properties memberOf, samAccountName | ForEach-Object -Process { @{ $_.samAccountName = $_.memberOf | Where-Object { $_ -like '*DAT*' } } }
$users.GetEnumerator() |
    Select-Object -Property @{N='AD1';E={$_.Key}},
    @{N='AD2';E={$_.Value}} |
        Export-Csv -NoTypeInformation -Path H:\test123.csv

如果您查看您的代码,您会创建一个哈希列表table,其中包含您的 SamAccountName 和组。但是,当您使用枚举器时,您只考虑散列table 而不是您创建的列表。

这是迭代哈希的方法table。您首先创建一个散列 table 并将所有元素添加到其中。

$hash = @{}
Get-ADUser -Filter { employeeNumber -notlike '*' } -Properties memberOf, samAccountName | ForEach-Object -Process { $hash.Add($_.samAccountName, ($_.memberOf | Where-Object { $_ -like '*DAT*' }))  }
$hash.GetEnumerator() |
    Select-Object -Property @{N='AD1';E={$_.Key}},
    @{N='AD2';E={$_.Value}} |
        Export-Csv -NoTypeInformation -Path H:\test123.csv

或者您可以继续使用散列列表table,但更改您访问数据的方式。列表中的每个元素都是一个带有键的散列table(其中只有一个)。

$users = Get-ADUser -Filter { employeeNumber -notlike '*' } -Properties memberOf, samAccountName | ForEach-Object -Process { @{ $_.samAccountName = $_.memberOf | Where-Object { $_ -like '*DAT*' } } }
$users.GetEnumerator() |
    Select-Object -Property @{N='AD1';E={$_.Keys[0]}},
    @{N='AD2';E={$_.Values[0]}} |
        Export-Csv -NoTypeInformation -Path H:\test123.csv