0

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

我需要创建一个.csv包含特定 OU 中所有用户的文件以及他们的 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. 输出具有 AD 组的.csv完整可分辨名称,我只需要不带限定符的组名称

4

2 回答 2

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'
于 2015-09-14T19:25:32.897 回答
0

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

像这样的东西:

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

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

于 2021-01-13T08:18:17.083 回答