【问题标题】:Import Member Group attribute from AD to .csv将成员组属性从 AD 导入 .csv
【发布时间】:2014-08-29 10:57:49
【问题描述】:

我在 Windows XP 下使用 ActiveRoles 命令行管理程序,Powershell 版本 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

【问题讨论】:

  • 它是否适用于 Select-Object -ExpandProperty 而不是 Select-Object -Property?
  • Select-Object : 无法将“System.Object[]”转换为参数“ExpandProperty”所需的类型“System.String”。不支持指定的方法。
  • 请提供所需输出的示例。您是希望它为每个组输出一个文件,还是将所有组放入一个文件中?
  • 我有列组名、组描述、组成员。在每个组成员单元格中,我都有特定组的成员一个接一个地被昏迷划分,例如 tomP、andrewN、jessicaR 等(这个例子是一个单元格)

标签: powershell csv active-directory export quest


【解决方案1】:

好的,正如 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 或类似的东西,实际上只是获取您的数据(和标题)。

【讨论】:

    【解决方案2】:

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

    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. 在到达calculated property 组之前,select 语句看起来很正常。
    3. 从上一行继续循环遍历每个用户是memberof 的组,并获取组的友好名称(MemberOf 返回DistinguishedName's)。在每个组的末尾添加一个";",以免干扰稍后制作的 CSV。
    4. 附加到 csv 文件。

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

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

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

    我无法测试这是否可行。它基于这样的假设,即 member 包含一个简单的名称,应该是 distinguishedname

    【讨论】:

    • 不幸的是,我必须使用 Quest AD shell,因为我无法安装 Active Directory 模块。
    • 我对您必须在 select 语句中进行哪些更改才能使此逻辑正常工作进行了有根据的猜测。我只是无法自己测试语法以查看输出是什么样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多