Powershell ActiveDirectory模块变量,通配符不起作用

时间:2013-12-05 17:56:22

标签: powershell module active-directory

为什么下面的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:\> 

4 个答案:

答案 0 :(得分:3)

尝试一下:

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

答案 1 :(得分:1)

相当蹩脚,看起来这是Windows附带的Powershell Active-Directory模块的众多限制之一。我原来的尝试没有做错任何事。我最终将输出管道输出到{}来过滤它的项目。

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

答案 2 :(得分:0)

这个怎么样:

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

这真的很烦人,你会希望这可以工作但是-filter内部有一些奇怪的解析规则我想

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

答案 3 :(得分:0)

Shay的解决方案非常有效(至少在第4版)

我还发现LDAPFilters也会起作用!

get-adcomputer -LDAPFilter“(&(name = $ name *)(operatingsystem = server ))”