【问题标题】:Create dynamic members of PSObject创建 PSObject 的动态成员
【发布时间】:2015-12-11 11:15:05
【问题描述】:

这是我得到的:

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 数组中的第一个组。

任何帮助表示赞赏,在此先感谢!

【问题讨论】:

标签: powershell export-to-csv


【解决方案1】:

将每个组放在 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,..."

【讨论】:

  • 感谢苏打水的回答。这很有效,并且会为我做这件事,但如果可能的话,如果可以的话,我上面提到的(每组一列)也能做到这一点会很好。干杯
  • 我可以知道这个文件将用于什么吗?我可以帮助制作您需要的格式的 Excel 电子表格,但使用 CSV 文件会太复杂(在我看来)。
  • 这是为了从现有的 AD 域 (DC) 迁移到新的域,因为有很多“垃圾组”和其他不再有用的信息,我不想要进行一对一的复制。我认为所有用户+组按列分隔的 csv 文件更容易导入到新域 (DC)(只需删除我不再需要的列),但我可能错了。
  • 所以您的问题基本上是:将 AD 组列表及其所有成员从一个域转移到另一个域的最佳方法是什么?顺便说一句,检查你的问题的评论,链接的问题提供了一个 sn-p 来转置列中的数据。但我想知道你接下来会用它做什么^_^。
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多