如何生成AD中自特定日期以来已更新的所有用户帐户的列表(可能是电子表格)?
我想在C#中这样做,但任何.net方法都可以接受。
以下是上下文:我在sharepoint门户中使用一个组件,允许用户自己更新其AD配置文件。但是,我还需要更新我的邮件列表,因此我需要知道他们何时更新他们的电子邮件地址。因此,我需要获取更改。
答案 0 :(得分:1)
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