我在Windows XP下使用ActiveRoles Management Shell,Powershell ver 2用于从AD中检索组数据并将其导出到csv文件。除了获取成员列表之外,所有内容都很好,因此程序在excel单元格中编写每次成员列System.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
答案 0 :(得分:0)
我无法访问任务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
要理解这一点:
memberof
的每个组,并获取该组的友好名称(MemberOf返回DistinguishedName
)。在每个组的末尾添加";"
,以便不会干扰稍后生成的CSV。 为简洁起见,我没有包含您在Select-Object
语句中包含的所有额外属性。你显然需要在需要适合时添加它们。
由于您使用了Quest cmdlet,因此您只需将select语句中的member
更改为以下内容:
@{Name="Groups";Expression={$_.member | ForEach-Object{"$_;"}}}
我无法测试这是否有效。它基于成员包含一个简单的名称,假设为distinguishedname
答案 1 :(得分:0)
好的,Matt建议你在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或其他一些,实际上只是获取你的数据(和标题)。