You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Skype for Business:使用变量过滤LineUri的服务器端查询无效求助

解决Skype for Business服务器端变量过滤LineUri失效的问题

这是个很典型的PowerShell与Skype for Business cmdlet交互的坑,我来帮你理清原因并给出解决方案!

问题根源

Get-CsUser的-Filter参数看起来用的是PowerShell脚本块语法,但实际上它底层是基于Active Directory的LDAP查询语法——大括号只是语法糖,里面的变量并不会被PowerShell自动解析替换成实际值。

当你执行:

$lineuri = 56660
Get-CsUser -Filter { lineuri -like "*$lineuri" }

实际传递给AD的过滤条件是查找lineuri包含字符串$lineuri的用户,而不是你定义的56660,所以自然不会返回任何结果。而直接写固定值时,AD能直接识别这个静态过滤条件,所以能正常返回结果。

正确解决方案

要让变量生效,你需要用字符串形式的过滤条件,让PowerShell先解析变量再传递给-Filter参数:

方案1:双引号字符串拼接

$lineuri = "56660"
Get-CsUser -Filter "lineuri -like '*$lineuri'"

双引号会让PowerShell先把$lineuri替换成实际值56660,最终传递给-Filter的是lineuri -like '*56660',和你手动写固定值的效果一致。

方案2:格式字符串(更易读,适合复杂条件)

$lineuri = "56660"
$filter = "lineuri -like '*{0}'" -f $lineuri
Get-CsUser -Filter $filter

用PowerShell的格式运算符-f提前构建好过滤字符串,再传递给参数,逻辑更清晰,尤其适合多个变量组合的场景。

额外说明

你提到不想用Where-Object是完全正确的——Where会先从服务器拉取所有7000个用户数据到本地,再在客户端过滤,性能非常差;而-Filter是在服务器端(AD层面)直接过滤,只返回符合条件的结果,效率高得多,所以一定要坚持用-Filter的正确写法。

内容的提问来源于stack exchange,提问作者Graham J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:47