如果给定的域帐户(如“myDomain \ myUser”)存在,是否有Powershell cmdlet或脚本查询Active Directory?
老问题,我知道,但我觉得我需要在这里添加这一点,因为没有任何以前的答案使用任何forms的error handling。
此外,如果您需要支持来自多个域的用户,则必须查询正确的域控制器(或查询全局编录并指定目录分区的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 }
这是我们用来validation帐户。 它当然依赖于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 }
您可以使用Directory Searchcher .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 ,然后再匹配。
或者不要像我一样懒惰,并阅读如何构build一个正确的查询:)
我将获取Quest ADangular色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."}