用于通过电子邮件获取用户的Powershell脚本

用于通过电子邮件获取用户的Powershell脚本,powershell,active-directory,Powershell,Active Directory,我试图写一个脚本,通过电子邮件地址获得用户,我需要这样做,无论电子邮件是大写还是小写 我写了这封信,但没有显示任何内容 $ADemail = "email-address@domain.co.uk" $aduser = Get-ADUser -Filter * -Property SamAccountName, EmailAddress foreach($user in $aduser) { $email = $user.EmailAddress if ( $email -ne

我试图写一个脚本,通过电子邮件地址获得用户,我需要这样做,无论电子邮件是大写还是小写

我写了这封信,但没有显示任何内容

$ADemail = "email-address@domain.co.uk"
$aduser = Get-ADUser -Filter * -Property SamAccountName, EmailAddress
foreach($user in $aduser)
{
    $email = $user.EmailAddress
    if ( $email -ne $null -and $email.ToLower() -eq $ADemail.ToLower() )
    {
        $user.SamAccountName
        $user.emailaddress
    }
}
我认为你的“如果”陈述是错误的。。。我认为IF试图说明$email是否不为null,将其转换为小写,看看它是否等于$ADemail

试试这个

if (($email -eq $null) -or ($email -eq ""))
{
    # skip
} else
{
    if ($email.ToLower() -eq $ADemail.ToLower() )
    {
        # write out results
    }
}

我的另一个观察结果是,这是一种非常有效的方法,可以获得您想要的答案-我建议使用get aduser with
-filter
让广告服务器为您执行所有过滤,而不是在本地执行。类似于
getaduser-Filter{mail-like$ADemail}-Properties-mail
(还没有测试过!)。另外值得注意的是,只有当您正在搜索的地址实际上位于
邮件属性中时,这才起作用-它也可能是代理地址之一。。。但那是另一个问题!(参考代理地址:)

调用
ToLower()
是不必要的,因为
-eq
默认不区分大小写。您需要使用
-ceq
进行区分大小写的比较。与
相比,不需要使用$null
,因为您可能不会对null对象调用方法。为了进行测试,我建议您打印出
$user.EmailAddress
,以确保它返回了一些内容,并且是预期的格式。我这样做了,我可以看到所有的帐户代码都正常工作。非常感谢。我确实尝试过这个Get-ADUser-Filter{emailaddress-like$ADemail}-Property-SamAccountName,emailaddress,但它不起作用,但现在我再试一次,它就起作用了。我确实同意这样的代码获得ADUser-Filter{emailaddress-like$ADemail}-Property SamAccountName,emailaddress会更好