在csv中交叉匹配用户名字段到Active Directory中的samaccount名称? +独特的过滤器?

时间:2016-08-03 15:10:49

标签: powershell active-directory

我最近获得了一个包含60k用户名的列表。然后我被要求在活动目录中找到这些用户名,列出他们的显示名称,并根据他们的会员(extensionattribute7)将它们保存在单独的CSV文件中。

我一直在摸索这个好好的3个小时..周围没有太多的资源可以帮助我,而且我变得绝望了。感谢您抽出宝贵时间帮助我!

1 个答案:

答案 0 :(得分:1)

我没有机会测试这个,但这是一个快速的脚本,可以满足你的需要。

本质上,脚本枚举了用户名的csv文件,并将构建一个包含csv中所有匹配用户的数组。此外,使用'extensionattribute7',它将在$ aAffiliates数组中构建一个唯一的联盟会员列表。

接下来,该脚本会枚举唯一的关联企业,并且每个关联企业都会找到所有关联企业属性与循环中当前关联企业匹配的用户。然后将这些找到的用户添加到$ aResults数组中,然后将其导出到包含文件名中的联属会员名称的csv文件。

希望这有帮助!

Import-Module ActiveDirectory

$aUsers = @()
$aAffiliates = @()
$List = Get-Content "C:\Temp\List.txt"

ForEach ($Item in $List) {
    $Item = $Item.Trim()
    $User = Get-ADUser -Filter { SamAccountName -like $Item } -Properties DisplayName, extensionattribute7

    # Build unique list of affiliates
    If ($aAffiliates -notcontains $User.extensionattribute7) {
      $aAffiliates += $User.extensionattribute7
    }

    $hItemDetails = New-Object -TypeName psobject -Property @{
        Username = $Item
        DisplayName = $User.DisplayName
        Affiliate = $User.extensionattribute7
    }

    #Add data to array
    $aUsers += $hItemDetails
}

ForEach ($Affiliate in $aAffiliates) {
  $aResults = @()

  ForEach ($User in $aUsers) {
    If ($User.Affiliate -eq $Affiliate) {
      $aResults += $User    
    }
  }

  $Path = "C:\Temp\Results-$($Affiliate).csv"
  $aResults | Export-CSV $Path
}