创建PSObject的动态成员

时间:2015-12-11 11:15:06

标签: powershell export-to-csv

这就是我得到的:

Import-Module ActiveDirectory

$objectCollection = @()
$groups = (Get-ADGroup -Filter *)

foreach ($group in $groups) {
    $groupName = ($group.SamAccountName)

    $object = (New-Object –Type PSObject)
    Add-Member -InputObject $object -MemberType NoteProperty –Name ($groupName) –Value ""

    $groupMembers = (Get-ADGroupMember -Identity "$groupName" -Recursive |
        Select-Object -ExpandProperty Name)
    $object.$groupName = $groupMembers

    $objectCollection += $object
}

$objectCollection | Export-Csv -Path C:\Users\administrator\Desktop\test.csv `
    -Encoding UTF8 -Delimiter ";" -NoTypeInformation

此脚本的目标是创建一个CSV文件,其中AD组名称是一列中的标题,然后是下面单独行中列出的组的所有成员。下一个组位于一个新列中,其中AD组名称为标题,依此类推......

通常情况下,我会根据需要创建尽可能多的成员,但这一次我希望它对于有多少个组是动态的,上面的脚本只显示$ groups数组中的第一个组。

感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

将每个组放在CSV文件中的单独列上对我来说似乎不合逻辑;每排一个恕我直言会更好(也更容易)。

我将如何做到这一点:

Import-Module ActiveDirectory

Get-ADGroup -Filter * | ForEach-Object {

    [PSCustomObject]@{    
        Name = $_.samAccountName
        Members = (Get-ADGroupMember $_ -Recursive | Select-Object -ExpandProperty Name) -join ","
    }
} | Export-Csv -Path "C:\Users\administrator\Desktop\test.csv" -Encoding UTF8 -Delimiter ";" -NoTypeInformation

输出:

"Name";"Members"
"Administrators";"Administrator,..."
"Domain Users";"Administrator,TestUser,..."