簡體   English   中英

Get-ADUser檢查沖突的proxyAddresses

[英]Get-ADUser Check for conflicting proxyAddresses

目前,我有一個創建用戶帳戶的腳本。

注意:並非所有用戶都具有相同的UPN(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. 如果不是,我應該打擾喬布斯,還是檢查沖突的另一種方法?

預先感謝您的任何幫助

您不需要擴展它,因為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*'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM