Get-ADuser Script Issue - PullRequest
       1

Get-ADuser Script Issue

0 голосов
/ 01 февраля 2019

Я хотел бы сравнить список адресов электронной почты, которые у меня есть в файле CSV, с нашей Active Directory.У меня возникают трудности с соединением всех частей.

Psuedo-Code:

  • Импорт списка адресов электронной почты в запрос активного каталога моей компании.
  • Присоединяйтесь по адресу электронной почты.
  • Возвращайте только те записи, в которых включена учетная запись в AD.

Код:

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, который я пытаюсь сделать, - это почта.

Ответы [ 4 ]

0 голосов
/ 02 февраля 2019

Я бы, наверное, сделал что-то вроде этого:

# 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) }

Надеюсь, это поможет

0 голосов
/ 01 февраля 2019

К упорядочить или сократить предложение 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 на данный момент для тестирования.

0 голосов
/ 02 февраля 2019

Получить письма csv в виде массива строк ($ array).Выберите -expand ваш друг.

Захватите пользователей из AD, направьте их на foreach-объект и спросите, есть ли $ array.Contains (свойство адреса электронной почты переданного объекта).

Как вы обрабатываете результат этого условия, зависит от вас;много способов справиться с этим.Но вам нужно найти способ, чтобы получить то, что вы просите, и это то, что я предоставил.

0 голосов
/ 01 февраля 2019

Вы можете сохранить импорт csv в одной переменной и получить из всех адресов электронной почты, которые у вас есть, использовать 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, отформатируйте в таблицу, что вам нужно после этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...