如何检查AD用户是否存在

时间:2018-02-15 18:07:41

标签: powershell active-directory powershell-v5.0

我正在我的"复制AD用户"中进行错误检查。 powershell脚本。我使用表单来询问具体信息,这个问题的目的是确保我正确地进行错误检查。

IF ($Username.Text -eq Get-ADUser ($Username.Text))
    {$wshell = New-Object -ComObject Wscript.Shell
    $wshell.PopUp("This username already exists.  Please choose another")}

$Username.Text是用于提取新帐户的用户名的文本框。我希望通过AD运行它以查看该用户名是否已存在,然后显示消息(如果已存在)。

我是以正确的方式去做的吗?

Pastebin of Full Code

4 个答案:

答案 0 :(得分:1)

这是一个快速的方法:

([ADSISearcher] "(sAMAccountName=kendyer)").FindOne()

如果未返回任何结果,则找不到用户帐户。

答案 1 :(得分:0)

Get-ADUser -Identity $Username.Text的问题在于它在找不到内容时抛出异常。如果您想避免这种情况,则必须使用过滤器进行搜索:

if (!(Get-ADUser -Filter "sAMAccountName -eq '$($Username.Text)'")) {
    "User does not exist."
}

否则,您可以执行以下操作:

try {
    Get-ADUser -Identity $Username.Text
    $UserExists = $true
}
catch [Microsoft.ActiveDirectory.Management.ADIdentityResolutionException] {
    "User does not exist."
    $UserExists = $false
}

答案 2 :(得分:0)

我在许多脚本中使用此功能。 如果您只运行Test-ADUser -Username $ Username, 它将返回用户属性,如果用户存在则返回true,否则返回False。

如果用于测试条件(用户是否存在?),它将返回true或false

将函数和导出Export-ModuleMember保存为.psm1文件。 示例:ADutils.psm1

创建一个与文件同名的文件夹。 示例:ADutils

将文件放在文件夹

将文件夹放在C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \

重新启动power shell和import-module ADutils -verbose

(为文件和文件夹选择一个好名字。这将是模块名称。你可以 通过编写函数并确保您编写的每个函数都存在Export-ModuleMember -Function,为该模块添加更多函数。

Function Test-ADUser {  
   [CmdletBinding()]  
  param(  
    [parameter(Mandatory=$true,position=0)]  
    [string]$Username  
    )  
     Try {  
       Get-ADuser $Username -ErrorAction Stop  
       return $true  
       }   
    Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {  
        return $false  
        }  
}   
Export-ModuleMember -Function Test-ADUser  


IF (Test-ADUser -Username w096224){  
   (New-Object -ComObject Wscript.Shell).PopUp("This username already exists.    Please choose another")  
}

答案 3 :(得分:0)

要直接回答您的问题,您可能应该执行以下操作。如果Get-ADUser返回$null以外的任何值,则SamAccountName已经存在。

IF ($null -ne $(Get-ADUser -Filter "SamAccountName -eq '$($Username.Text)'"))
    {$wshell = New-Object -ComObject Wscript.Shell
    $wshell.PopUp("This username already exists.  Please choose another")}

说明

您可以分别搜索每个LdapDisplayName属性。基本语法为:

Get-ADUser -Filter "<LdapDisplayName> -eq '<String Value>'"

示例

Get-ADUser -Filter "SamAccountName -eq '$SamAccountName'"
Get-ADUser -Filter "UserPrincipalName -eq '$UserPrincipalName'"
Get-ADUser -Filter "EmailAddress -eq '$EmailAddress'"
Get-ADUser -Filter "Name -eq '$Name'"

Get-ADuser找不到匹配项时,它将返回$null,这很容易测试。请注意,如果找不到ADUser,则使用-Filter参数Get-ADUser时不会抛出错误。

$ExistingADUser = Get-ADUser -Filter "SamAccountName -eq '$SamAccountName'"

if($null -eq $ExistingADUser){
    write-host "SamAccountName '$SamAccountName' does not yet exist in active directory" 
}

how to use the filter parameter