Назад | Перейти на главную страницу

Проверить наличие доменных учетных записей с помощью скрипта Powershell

Есть ли командлет или сценарий Powershell для запроса Active Directory, если заданная учетная запись домена (например, «myDomain \ myUser») существует?

Это то, что мы используем для проверки учетных записей. Конечно, он полагается на Import-Module ActiveDirectory и либо DC 2008 R2, либо DC с ADWS:

function validateUser
{
    param(
    [string]$username
    )

    # If the username is passed without domain\
    if(($username.StartsWith("domain\")) -eq $false)
    {
        $user = Get-ADUser -Filter { SamAccountName -eq $username }
        if (!$user)
        {
            return $false
        }
        else
        {
            return $true
        }
    }
    elseif(($username.StartsWith("domain\")) -eq $true)
    {
        $username = ($username.Split("\")[1])
        $user = Get-ADUser -Filter { SamAccountName -eq $username }
        if (!$user)
        {
            return $false
        }
        else
        {
            return $true
        }
    }
}
$userCheck = validateUser -username smith02
if($userCheck -eq $true) { do stuff } else { user doesn't exist }

Старый вопрос, я знаю, но я чувствую, что мне нужно добавить этот бит здесь, потому что ни один из предыдущих ответов не использует какую-либо форму обработки ошибок.

Кроме того, если вам нужно поддерживать пользователей из нескольких доменов, вам нужно будет запросить правильный контроллер домена (или запросить глобальный каталог и указать DN раздела каталога).

$Domainname = 'ABC'
$Username = 'Administrator'

Try
{
   $DomainController = Get-ADDomainController -DomainName $DomainName -Discover -ErrorAction Stop
   Get-ADUser -Identity $Username -Server $DomainController -ErrorAction Stop

   # user account exists
}
Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
{
   # no error, user account does not exist
}
Catch
{
   # Domain controller not found, domain unreachable, authentication failure or another error occurred
}

Вы можете использовать Объект Directory Searcher .net сделать это.

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

$AD = [ADSI]"<ldap_connection_string>"
$query = New-Object System.DirectoryServices.DirectorySearcher
$query.SearchRoot = $AD
$Users = $query.FindAll() | Where-Object {$_.properties.objectclass -eq "user"} 

Таким образом, вы сможете изменить .objectclass к .cn или .name а затем сопоставьте с этим.

Или не ленитесь, как я, и читайте, как построить правильный запрос :)

Я бы взял командлеты Quest AD Roles - http://www.quest.com/powershell/activeroles-server.aspx - и используйте их командлет Get-QADUser с параметром -Identity.

Например,

$username = "mydomain\myusername"

if (Get-QADUser -Identity $username)
{Write-Host "It's alive"}
else
{Write-Host "Account does not exist."}