如何将这些结果导出为逗号分隔的 csv 文件

How to export these results in a comma delimited csv file

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

脚本运行良好,returns 我关心的数据,只是格式不可用。

该脚本获取特定组中的用户并循环遍历用户列表,为每个用户拉取附加信息。我不熟悉 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

Powershell 让这一切变得超级简单。

您的 $members 是一个 PSCollection,因此您实际上可以使用管道运算符将 Process-Members 传递到 Export-Csv 中。

Process-Members $members | Export-Csv -Path {Your Desired CSV Location}

这应该可以解决问题。

在此处查看手册页: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-6

就改进该脚本而言;在我看来,你应该做乍一看最适合你阅读的内容。 Powershell 提供了各种工具来实现奇特的技巧。您可能可以使用漂亮的单行代码来做到这一点,但是如果您查看代码并开始流口水,因为无法分辨单行代码的作用,那不是很好。

就个人而言,我不喜欢在 powershell 中声明函数,除非我打算重新使用它们的功能。我只是将您的成员处理成一个变量,然后您可以将其通过管道传输到 export-csv,而不是创建一个函数。但对性能没有影响,所以这只是个人喜好。

我删除了你的功能,因为它不是这个过程所必需的。您可以轻松修改它以再次使用您的功能。我还删除了 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 属性 是通过从 Get-ADGroup 输出返回 SamAccountName 属性 并将结果与​​ ;.您可以更改该连接字符。默认情况下离开连接,将加入带有 space 的组,因此如果组包含 spaces,它可能会变得混乱。 % 只是 ForEach-Object 的别名。 Export-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