Get-ADUser Проверка на наличие конфликтующих proxyAddresses - PullRequest
0 голосов
/ 14 мая 2018

В настоящее время у меня есть скрипт, который создает учетные записи пользователей.

Примечание: Не все пользователи имеют одно и то же имя участника-пользователя (UserPrincipalName)

Учетные записи пользователей имеют следующий формат: <firstinit><lastname>.

Если это конфликтует, формат будет изменен на: <firstinit><middleinit><lastname>

Недавно я столкнулся с проблемой, когда пользователь proxyAddress конфликтует с существующими пользователями.Это проблема, потому что AD не поймает это.

Проблема:

Проверка каждого прокси-адреса AD-User занимает много времени, если он не включен в фильтр.Однако при включении proxyAddresses в фильтр результаты будут противоречивыми.Я предполагаю, что это потому, что атрибут proxyAddresses является массивом.

Непоследовательный :

Import-Module ActiveDirectory
$FirstLast = "jrider@ChuckNorrisKills.com"

$conflictCheck = Get-ADUser -Properties mail, proxyAddresses -Filter "mail -eq '$FirstLast' -or UserPrincipalName -eq '$FirstLast' -or proxyAddresses -eq `"smtp:'$FirstLast'`"" | measure
if($conflictCheck.Count -gt 0)
{
    Write-Host "New user conflicts with existing user" -ForegroundColor Red 
}

Я нашел решение, которое решит мою проблему.К сожалению, это очень медленно (ожидается):

Import-Module ActiveDirectory
function Test-NewADUser
{    
    Param(
        [Parameter(Mandatory=$true)][string]$firstname, 
        [Parameter(Mandatory=$true)][string]$lastname,         
        [Parameter(Mandatory=$false)][string]$middle        
    )    
    [bool]$proxExsists = $false

    $domain = '@chuckNorrisKills.com'    
    $FirstLast = $firstname.Substring(0,1)+$lastname+$domain
    Get-ADUser -Filter * -Properties proxyAddresses | foreach {
            #xpand the proxy address and iterate through it
            foreach($address in $_.proxyAddresses)
            {
                #As you can see this goes through every user
                Write-Host "Address: " $address -ForegroundColor Yellow                
                if($address -eq "smtp:$FirstLast")
                {
                    Write-Host "Found Conflict" -ForegroundColor Red
                    $proxExsists = $true
                }
            }            
        }   
}

Test-NewADUser -firstname jack -lastname Rider

Вопрос (ы):

  1. Есть ли способ расширить proxyAddresses и проверитьконфликты в -Filter?
  2. Если нет, стоит ли мне беспокоиться о Джобсе или об альтернативном способе проверки конфликтов?

Заранее благодарю за любую помощь

1 Ответ

0 голосов
/ 14 мая 2018

Вам не нужно расширять его, так как фильтр proxyAddress должен быть надежным.

Итак, это должно быть очень просто:

function Validate-proxyAddress($email)
{

    if (Get-ADUser -Filter "proxyAddresses -eq 'smtp:$email'")
    {
        return $true
    }
    elseif (Get-ADUser -Filter "mail -eq '$email'")
    {
        return $true
    }
    elseif (Get-ADUser -Filter "UserPrincipalName -eq '$email'")
    {
        return $true
    }

    return $false
}

или вы можете объединить все это в один, как ваш код, не проверял его, поэтому, если вы ошиблись, пользователь не существует, должно быть в порядке, чтобы продолжить ...

Кроме того, вы можете использовать -like вместо -eq, если вам нужно (в тех случаях, когда отсутствует префикс smtp):

"proxyAddresses -like '*$email*'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...