Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 在同一搜索字符串中使用通配符和变量时,Get ADUser失败_Powershell_Active Directory - Fatal编程技术网

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
无法在过滤器中访问。在过滤器中,使用脚本块<代码>//脚本块的开始-->{…过滤器..}这已经解决了问题,谢谢。我不知道还有另外一种过滤器可以使用,它的优点是速度稍微快一点!(虽然搜索代理地址而不是邮件的速度会非常慢,但我们已经为一些人设置了别名地址,所以必须这样做)这解决了问题,谢谢。我不知道还有另外一种过滤器可以使用,它的优点是速度稍微快一点!(虽然搜索代理地址而不是邮件的速度会非常慢,但我们已经为一些人设置了别名地址,所以必须这样做)