Powershell 在同一搜索字符串中使用通配符和变量时,Get ADUser失败
我有一个命令,可以通过用户的代理电子邮件地址搜索用户Powershell 在同一搜索字符串中使用通配符和变量时,Get ADUser失败,powershell,active-directory,Powershell,Active Directory,我有一个命令,可以通过用户的代理电子邮件地址搜索用户 Get-ADUser -Filter {ProxyAddresses -like "*bob@bob.com*"} 这个命令返回我想要的用户的记录,并且工作正常 我还可以创建一个变量来存储将要查找的确切字符串,并搜索该字符串,我还可以得到正确的结果 $email = "smtp:bob@bob.com" Get-ADUser -Filter {ProxyAddresses -like $email} 我不想在我正在搜索的记录不是smtp的
Get-ADUser -Filter {ProxyAddresses -like "*bob@bob.com*"}
这个命令返回我想要的用户的记录,并且工作正常
我还可以创建一个变量来存储将要查找的确切字符串,并搜索该字符串,我还可以得到正确的结果
$email = "smtp:bob@bob.com"
Get-ADUser -Filter {ProxyAddresses -like $email}
我不想在我正在搜索的记录不是smtp的情况下执行上述操作:(一些可能是sip或其他)
但是,我正在遍历一个用户列表,因此我需要查找$email,而不是实际的字符串。我想这样做:
Get-ADUser -Filter {ProxyAddresses -like "*$email*"}
这将返回$null。我不明白为什么。我打开了一个新窗口,将$email设置为一个地址,我知道当我自己键入它时,这个地址可以工作,但结果仍然是$null
我假设这与添加通配符有关,但我不知道问题出在哪里
也许是引号,因为以下内容也失败了:
Get-ADUser -Filter {ProxyAddresses -like "$email"}
我以前一直能够在字符串中使用变量,所以我不明白为什么它会失败。我认为它不会工作,因为你在
{}
中使用$email
在函数项内部,不能使用外部变量。
您必须将其放入全局范围,或使用
所以试试这个:
Get-ADUser -Filter {ProxyAddresses -like "*$having:email*"}
或将$email设置为全局:
$global:email = $email
Get-ADUser -Filter {ProxyAddresses -like "*$global:email*"}
只要看看我想它不会工作,因为你在
{}
中使用$email
在函数项内部,不能使用外部变量。
您必须将其放入全局范围,或使用
所以试试这个:
Get-ADUser -Filter {ProxyAddresses -like "*$having:email*"}
或将$email设置为全局:
$global:email = $email
Get-ADUser -Filter {ProxyAddresses -like "*$global:email*"}
请看一下我通常的建议是使用
-LDAPFilter
而不是-Filter
Get-ADUser -LDAPFilter "(proxyAddresses=*$email*)"
在内部,Get-ADUser必须将
-Filter
转换为LDAP筛选器,正如您所看到的,让-Filter
处理嵌入变量可能很棘手。我通常建议使用-LDAPFilter
而不是-Filter
Get-ADUser -LDAPFilter "(proxyAddresses=*$email*)"
在内部,Get-ADUser必须将
-Filter
转换为LDAP筛选器,正如您所看到的,让-Filter
处理嵌入变量可能很棘手。我可以很好地引用$email。我已尝试将$email设置为确切地址(smtp:bob@bob.com)它是有效的。“$email”不起作用,因此可能与引号有关,但我看不出这有什么关系。它不起作用,因为您使用的变量$email
无法在过滤器中访问。在过滤器中,使用脚本块//脚本块的开始-->{…过滤器..}我可以引用$email。我已尝试将$email设置为确切地址(smtp:bob@bob.com)它是有效的。“$email”不起作用,因此可能与引号有关,但我看不出这有什么关系。它不起作用,因为您使用的变量$email
无法在过滤器中访问。在过滤器中,使用脚本块<代码>//脚本块的开始-->{…过滤器..}这已经解决了问题,谢谢。我不知道还有另外一种过滤器可以使用,它的优点是速度稍微快一点!(虽然搜索代理地址而不是邮件的速度会非常慢,但我们已经为一些人设置了别名地址,所以必须这样做)这解决了问题,谢谢。我不知道还有另外一种过滤器可以使用,它的优点是速度稍微快一点!(虽然搜索代理地址而不是邮件的速度会非常慢,但我们已经为一些人设置了别名地址,所以必须这样做)