我想将CSV文件中的电子邮件地址列表与Active Directory进行比较。我在将所有部件组合在一起时遇到困难。
伪代码:
代码:
Import-Csv users.csv |
Get-ADUser -Filter {mail -eq $_.mail } |
where {$_.enabled -eq $true} |
Select-Object -Property DistinguishedName, samaccountname, mail, enabled
我认为我需要为SearchBase添加其他信息,但是我不知道如何添加它。
例如:-SearchBase "DC=na,DC=corp,DC=<company name>,DC=com"
在CSV文件中是一列。列名是邮件。我要加入的AD属性是邮件。
答案 0 :(得分:0)
您可以将csv导入存储在一个变量中,并获取所拥有的AD中所有电子邮件地址,在列表之间使用Compare-Object
,然后对结果使用foreach。
$matchingUsers = New-Object System.Collections.ArrayList
$csv = import-csv users.csv
$emails = $(get-aduser -filter * -Properties mail,Enabled | ? {$_.Enabled -eq $True} | select mail).mail
$comparison = $($(compare-object -ReferenceObject $a -DifferenceObject $b -IncludeEqual)| ? {$_.SideIndicator -eq '=='}).InputObject
foreach($object in $comparison) {
$user = Get-ADUser -Filter {mail -eq $object} -SearchBase "DC=na,DC=corp,DC=,DC=com" -Properties DistinguishedName,samaccountname,mail,enabled
$matchingUsers.Add($user)
}
然后导出$matchingUsers
,将其格式化为表格,此后所需的任何内容
答案 1 :(得分:0)
要让 streamline 或缩短 trebleCode的建议,您可以从以下类似内容开始:
$MailAddressList = Import-Csv -Path users.csv
$AllUsersList = Get-ADUser -Filter * -SearchBase 'DC=na,DC=corp,DC=,DC=com' -Properties DistinguishedName,samaccountname,mail,enabled | Where-Object {$_.enabled}
Compare-Object -ReferenceObject $MailAddressList -DifferenceObject $AllUsersList -Property 'Mail' -PassThru -IncludeEqual -ExcludeDifferent
如果需要,您可以将-ReferenceObject
与-DifferenceObject
交换。我目前没有要测试的Active Directory。
答案 2 :(得分:0)
获取csv电子邮件作为字符串数组($ array)。选择-expand是您的朋友。
从AD中获取用户,通过管道传输到foreach-object,并询问$ array.Contains(通过管道传输到对象中的电子邮件地址属性)。
如何处理该条件的结果由您决定;处理它的方法很多。但是您需要一种毫不费力的方式来获取您所要的内容,这就是我所提供的。
答案 3 :(得分:0)
我可能会做这样的事情:
# enter the DistinghuishedName of the OU where the users to check are in
$SearchBase = 'DC=na,DC=corp,DC=,DC=com'
$CsvPath = 'PATH TO THE USERS.CSV FILE'
$UserList = Import-Csv -Path $CsvPath
# for fast lookup, best use a Hashtable
$MailLookup = @{}
foreach ($user in $UserList) {
$MailLookup[$user.mail] = $true # the value is not important here
}
# in fact, the properties DistinguishedName,SamAccountName and Enabled are returned by default
Get-ADUser -Filter * -SearchBase $SearchBase -Properties DistinguishedName,SamAccountName,EmailAddress,Enabled |
Where-Object {$_.Enabled -and $MailLookup.ContainsKey($_.EmailAddress) }
希望这会有所帮助