【问题标题】:Export CSV of AD SamAccountNames and Groups for every user in specific OU为特定 OU 中的每个用户导出 AD SamAccountNames 和组的 CSV
【发布时间】:2015-09-14 18:24:17
【问题描述】:

我发现了一个类似的问题 here,但它不太符合我的需要,我在调整它时遇到了麻烦。

我需要为特定 OU 中的所有用户创建一个 .csv 文件,以及他们的 AD 组成员身份,格式如下:

User, Group (This is a Header)
User1, Group1
User1, Group2
User1, Group3
User2, Group1
User3, Group1
User4, Group1
User4, Group2

我认为这个脚本让我大部分时间到达那里:

$Users = Get-ADGroup -SearchBase "OU=OrgUnit1,OU=OrgUnit2,OU=OrgUnit3,DC=XXX,DC=LOCAL" -Filter * `
    | Get-ADGroupMember -Recursive `
    | ForEach-Object { Get-ADUser $_ –Properties MemberOf | Select SamAccountName, MemberOf; } `
    | Sort-Object SamAccountName
    | export-csv C:\Messaging\PowerShell\ADUsers\Test1.csv

这个问题有两个方面。

  1. 我想搜索 OU=OrgUnit1 而不必搜索完整的专有名称,因为子 OU 并不总是相同。

  2. .csv 输出具有 AD 组的完整可分辨名称,我只需要不带限定符的组名称

【问题讨论】:

    标签: powershell csv active-directory ou


    【解决方案1】:

    使用Get-ADOrganizationalUnit 获取您要搜索的OU:

    $ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
    Get-ADGroup -Filter * -SearchBase $ou | ...
    

    memberOf 属性是一组组(或者更确切地说是它们的专有名称)的列表。要获得所需的输出,您需要展开并解析组名称并创建具有所需属性的新自定义对象:

    ... | ForEach-Object {
      $account = $_.SamAccountName
      $_.MemberOf | Get-ADGroup | ForEach-Object {
        New-Object -Type PSCustomObject -Property @{
          SamAccountName = $account
          Group          = $_.Name
        }
      }
    } | ...
    

    此外,如果在管道结束时将输出导出到文件,则将管道输出分配给变量 ($Users) 是没有意义的。

    修改代码:

    $ou = Get-ADOrganizationalUnit -Filter "Name -eq 'OrgUnit1'"
    Get-ADGroup -Filter * -SearchBase $ou |
      Get-ADGroupMember -Recursive |
      ForEach-Object { Get-ADUser $_ -Properties MemberOf; } |
      Sort-Object SamAccountName |
      ForEach-Object {
        $account = $_.SamAccountName
        $_.MemberOf | Get-ADGroup | ForEach-Object {
          New-Object -Type PSCustomObject -Property @{
            SamAccountName = $account
            Group          = $_.Name
          }
        }
      } | Export-Csv 'C:\Messaging\PowerShell\ADUsers\Test1.csv'
    

    【讨论】:

    • 我刚刚不小心编辑了原始问题,因为我不知何故错过了您几天前的回复。但是这个回复仍然符合编辑后的问题,并且完全符合我的需要,谢谢。
    【解决方案2】:

    您不需要编写这么多代码。在 PowerShell 中使用以下代码导出所有 AD 用户。

    类似这样的:

    Import-Module ActiveDirectory
    Get-ADUser -Filter * -Properties * | export-csv c:\ADusers.csv
    

    如果你有一个很大的广告,那可能需要一段时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      相关资源
      最近更新 更多