首页 > 解决方案 > 如何以逗号分隔的 csv 文件导出这些结果

问题描述

我正在尝试确定是否有办法切换下面的内容并将其导出为逗号分隔的 csv 文件。

该脚本工作正常并返回我关心的数据,只是不是可用的格式。

该脚本获取特定组中的用户并遍历用户列表,为每个用户提取附加信息。我对 powershell 不熟悉,因此由于缺乏知识,我可能会使这变得比必要的更难。

Import-module activedirectory

Function Process-Members($MemberList)
{
    foreach ($member in $MemberList)
    {
        Get-ADUser -Identity $member.samaccountname -Properties * | select Name, SamAccountName, Enabled, @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}}
        dsquery user -samid $member.samaccountname | dsget user -memberof | dsget group -samid
    }
}

$members = Get-ADGroupMember "MyGroupName" -recursive | Select-Object name, SamAccountName

Process-Members $members

标签: powershellcsvactive-directorypowershell-2.0

解决方案


我删除了您的功能,因为此过程并非完全必要。您可以轻松修改它以再次使用您的功能。我还删除了 dsquery 和 dsget 命令,因为 ActiveDirectory 模块具有可以获取此信息的命令。

$members = Get-ADGroupMember "MyGroupName" -recursive | Select-Object name, SamAccountName

$Output = foreach ($member in $members) {

    Get-ADUser -Identity $member.SamAccountName -Properties * |
       select Name, SamAccountName, Enabled,
       @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}},
       @{n='MemberOf';e={($_.MemberOf |% {Get-ADGroup $_}).SamAccountName -join "; "}}
}

$Output | Export-Csv -Path output.csv -NoTypeInformation

选定的MemberOf属性是通过SamAccountNameGet-ADGroup输出中返回属性并将结果与​​ 连接在一起来计算的;。您可以更改该连接字符。默认情况下,离开连接,将加入带有空格的组,因此如果组包含空格,它可能会变得混乱。%只是 的别名ForEach-ObjectExport-Csv用于创建逗号分隔的 CSV 输出文件 (output.csv)。

对于所有版本的 PowerShell(2.0 及更高版本),您可以使用以下内容:

$members = Get-ADGroupMember "MyGroupName" -recursive | Select-Object name, SamAccountName

$Output = foreach ($member in $members) {

    Get-ADUser -Identity $member.SamAccountName -Properties * |
       select Name, SamAccountName, Enabled,
       @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}},
       @{n='MemberOf';e={($_.MemberOf |% {Get-ADGroup $_ | Select -Expand SamAccountName}) -join "; "}}
}

$Output | Export-Csv -Path output.csv -NoTypeInformation

推荐阅读