Есть ли командлет или сценарий 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."}