如何生成 AD 帐户配置文件中所有更改的报告

本文关键字:报告 AD 何生成 配置文件 | 更新日期: 2023-09-27 18:35:22

如何生成自特定日期以来已更新的AD中所有用户帐户的列表(也许是电子表格)?

我正在考虑用 C# 执行此操作,但任何 .net 方法都是可以接受的。

下面是上下文:我在 SharePoint 门户中使用了一个组件,该组件允许用户自行更新其 AD 配置文件。 但是,我还需要更新我的邮件列表,因此我需要知道他们何时更新他们的电子邮件地址。 因此,我需要获取更改。

如何生成 AD 帐户配置文件中所有更改的报告

AD在

高级查询方面很慢。我想从AD中提取完整的用户列表,然后在邮件列表中搜索更改(假设您在数据库中有更改)可能会更便宜。用户名的完整列表及其电子邮件应该会很快生成(当然取决于用户数量)。

编辑:一个简单的帮助程序Powershell脚本,用于快速从AD中获取用户

# Get the RootDSE
$rootDSE=[ADSI]"LDAP://RootDSE"
# Get the defaultNamingContext
$Ldap="LDAP://"+$rootDSE.defaultNamingContext
# Create the output file
$outFile=".'users'userList_{0:yyyyMMdd-HHmm}.csv" -f (Get-Date)
# Get all users 
$filter="(&(ObjectClass=user))"
# create the Header for the Output File
$header="name;userPrincipalName;mail"
$timeStamp=
# Check if the file exists and if it does with the same timestamp remove it
if(Test-Path $outFile)
{
  Remove-Item $outFile
}
# create the output file and write the header
Out-File -InputObject $header -FilePath $outFile
# main routine
function GetUserListToFile()
{
  # create a adsisearcher with the filter
  $searcher=[adsisearcher]$Filter
  # setup the searcher properties
  $Ldap = $Ldap.replace("LDAP://","")
  $searcher.SearchRoot="LDAP://$Ldap"
  $searcher.propertiesToLoad.Add("name")
  $searcher.propertiesToLoad.Add("userPrincipalName")
  $searcher.propertiesToLoad.Add("mail")
  $searcher.pageSize=1000
  # find all objects matching the filter
  $results=$searcher.FindAll()
  # create an empty array
  $ADObjects = @()
  foreach($result in $results)
  {
    # work through the array and build a custom PS Object
    [Array]$propertiesList = $result.Properties.PropertyNames
    $obj = New-Object PSObject
    foreach(property in $propertiesList)
    { 
       $obj | add-member -membertype noteproperty -name $property -value ([string]$result.Properties.Item($property))
    }
    # add the object to the array
    $ADObjects += $obj
    # build the output line
    $lineOut=$obj.Name+";"+ $obj.UserPrincipalName+";"+ $obj.mail
    # Write the line to the output file
    Out-File -Append -InputObject $lineOut -FilePath $outFile
  }
  Return $ADObjects
}
# main routine
GetUserListToFile