我正在我的"复制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运行它以查看该用户名是否已存在,然后显示消息(如果已存在)。
我是以正确的方式去做的吗?
答案 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"
}