【问题标题】:How to use GetEnumerator() to export hash table to a csv file in PowerShell?如何使用 GetEnumerator() 将哈希表导出到 PowerShell 中的 csv 文件?
【发布时间】:2020-05-13 00:46:06
【问题描述】:

我写了一个搜索函数,它搜索一些活动目录属性。我现在想将内容导出到 .csv 文件。如果我没看错,整个输出就是一个哈希表。但是当我尝试使用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

【问题讨论】:

    标签: powershell csv active-directory hashtable


    【解决方案1】:

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

    这就是您可以遍历哈希表的方式。您首先创建一个哈希表并向其中添加所有元素。

    $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
    

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

    $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
    

    【讨论】:

    • 工作得非常好。结果是我想要达到的结果。非常感谢,解释也很有用。我不明白,我用自己的哈希表创建了一个列表,这是新学到的东西。
    猜你喜欢
    • 2011-07-01
    • 2018-01-22
    • 2018-09-16
    • 1970-01-01
    • 2020-01-24
    • 2016-02-24
    • 2021-05-29
    • 2019-02-04
    相关资源
    最近更新 更多