0

我在 Windows XP 下使用 ActiveRoles 命令行管理程序,Powershell ver 2 用于从 AD 检索组数据并将其导出到 csv 文件。除了获取成员列表之外,一切都运行良好,它是如此之长以至于程序在成员列 System 下的 excel 单元格中写入.String[] 每次。我怎样才能让它在那里写整个列表,有可能吗?我实际上可以只有成员的名称不需要整个连接路径。是否有可能从组字段成员中获取名称?

get-QADGroup -SearchRoot 'ou=User,ou=Groups,ou=PL,dc=test,dc=com'| Select-Object -property name,sAMAccountName,description,groupType,member|Export-Csv -path Y:\csv\groups.csv
4

2 回答 2

0

我无权访问 quest cmdlet,因此我将提供基于 cmdlet 的解决方案activedirectory

Get-ADUser -Filter * -SearchBase "OU=Employees,DC=Domain,DC=Local" -Properties memberof |
    Select-Object name,@{Name="Groups";Expression={$_.MemberOf | 
    ForEach-Object{(Get-ADGroup -Identity $_).Name + ";"}}} | 
    Export-Csv C:\temp\TEST.CSV -Append

为了理解这一点:

  1. 应该是不言自明的。获取定义的 OU 中的所有用户。您需要更改此设置以满足您的需要。
  2. 选择语句显示正常,直到您到达计算的属性组。
  3. 上一行的后续内容是循环遍历单个用户所属的每个组memberof并获取该组的友好名称(MemberOf 返回DistinguishedName's)。在每个组的末尾添加一个";",以免干扰稍后制作的 CSV。
  4. 附加到 csv 文件。

为简洁起见,我没有包括您在Select-Object声明中包含的所有额外属性。您显然需要根据需要添加这些内容。

由于您使用了 Quest cmdlet,您只需将member您的 select 语句更改为以下内容:

@{Name="Groups";Expression={$_.member | ForEach-Object{"$_;"}}}

我无法测试这是否可行。它基于成员包含一个简单名称的假设distinguishedname

于 2014-08-29T12:47:57.273 回答
0

好的,正如马特建议的那样,您需要在 Select 语句中使用表达式。我会使用这样的东西:

@{l="Members";e={$_.Members -join ", "}}

当插入你的单衬里时,它看起来像:

get-QADGroup -SearchRoot 'ou=User,ou=Groups,ou=PL,dc=test,dc=com'| Select-Object -property name,sAMAccountName,description,groupType,@{l='Members';e={$_.member -join ", "}}|Export-Csv -path Y:\csv\groups.csv -NoTypeInfo

我还在导出中添加了 -NoTypeInfo 以跳过烦人的引导线,告诉您它是 PSCustomObject 或类似的东西,实际上只是获取您的数据(和标题)。

于 2014-08-29T16:42:49.653 回答