使用 Powershell 脚本检查域帐户的存在

使用 Powershell 脚本检查域帐户的存在

如果给定的域帐户(例如“myDomain\myUser”)存在,是否有 Powershell cmdlet 或脚本来查询 Active Directory?

答案1

我知道这是一个老问题,但是我觉得我需要在这里添加这一点,因为以前的答案都没有使用任何形式的错误处理。

此外,如果您需要支持来自多个域的用户,则必须查询正确的域控制器(或查询全局目录并指定目录分区的 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
}

答案2

这是我们用来验证帐户的方法。当然,它依赖于 Import-Module ActiveDirectory 和 2008 R2 DC 或运行 ADWS 的 DC:

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 }

答案3

您可以使用目录搜索器 .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然后与其进行匹配。

或者不要像我一样懒惰,并了解如何构建正确的查询:)

答案4

我会抓住 Quest AD Roles cmdlet -http://www.quest.com/powershell/activeroles-server.aspx- 并使用 -Identity 参数使用他们的 Get-QADUser cmdlet。

例如,

$username = "mydomain\myusername"

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

相关内容