带有通配符的Powershell ActiveDirectory模块变量不起作用



为什么下面的get adcomputer命令行没有返回任何结果?当cmdlet不适应powershell语法时,这真的很烦人。至少这就是这里正在发生的事情。如果我进行写输出,它会准确地显示我希望在命令行中插入的内容。但是,当我将它与get-adcomputer cmdlet一起使用时,不会返回任何结果。

PS: C:> $Variable = "88FF"
PS: C:> write-output "*$($Variable)*"
*88FF*
PS: C:> Get-ADComputer -Filter {Name -like "*$($Variable)*"} -Property * 
PS: C:> 
PS: C:> Get-ADComputer -Filter {Name -like "*88FF*"} -Property * 
computer1
computer2
computer3

我尝试了很多不同的变体。。。甚至包括通过转义将文字引号添加到变量中。我一直在努力找出一些不到10秒就能完成的事情。

PS: C:> $Variable = "`"*888FF*`""
PS: C:> $Variable
"*88FF*"
PS: C:> PS: C:> Get-ADComputer -Filter {Name -like $Variable} -Property * 
PS: C:> 

编辑:我也尝试过以下变体,结果完全相同:

PS: C:> Get-ADComputer -Filter {Name -like '*$Variable*'} -Property * 
PS: C:> 

尝试一下:

Get-ADComputer -Filter "Name -like '*$Variable*'" -Property *

很蹩脚,这似乎是Windows附带的Powershell Active Directory模块的众多限制之一。我最初的尝试没有做错什么。我最终将输出通过管道传输到{}的位置,以过滤它的项。

Get-ADComputer -properties Name, OperatingSystem -Filter *| ?{$_.name -like "*$($Variable)*"} |ft Name, OperatingSystem -Wrap -Auto

这个怎么样:

$myvar="*888FF*"
get-adcomputer -filter {name -like $myvar} -property *

这真的很烦人,你会期望它能工作,但filter内部有一些奇怪的解析规则,我想

$myvar="888FF"
get-adcomputer -filter {name -like "*$myvar*"} -property *

Shay的解决方案运行良好(至少在v4上)

我还发现LDAFilter也能工作!

获取广告计算机-LDAPFilter"(&(name=$name*)(操作系统=服务器))"

最新更新