我有以下PowerShell脚本
$server = Get-ADComputer -filter {name -like $computerhost}
write-host $server.name
它为我提供了包含$computerhost
名称的ADComputer。
示例:
$computerhost = linuxserver
匹配计算机名称输出:" linuxserver01"
但如果计算机名称适合$computerhost
,我实际上想要ADComputer。所以如果$ computerhost是" asdf"我想得到一台名为" a"或" as"或者" asd"或" asdf",但不是" asda"
示例:
$computerhost = linuxserver (new)
匹配计算机名输出:" linuxserver"
我不知道如何以这种方式使用通配符。
答案 0 :(得分:2)
感谢您通过评论澄清。我想这可能就是你要找的东西:
Get-ADComputer -filter * | where-object { $computerhost -like "*$($_.name)*" }
例如(我在这里使用$ computers代替get-adcomputer):
$computers = 'a','as','asd','asdf','asda'
$computerhost = 'asdf'
$computers | where-object { $computerhost -like "*$_*" }
返回:
一
作为
ASD
ASDF
答案 1 :(得分:1)
如果您要查找与字符串$computerHost
的部分匹配,则过滤器将无法处理,因为它未正确转换为LDAP查询。返回选择集中的所有计算机后,您必须处理该过滤器。如果您拥有大型计算机基础,则可以使用-SearchScope
这样的参数来减少这种情况。最简单的方法是使用.contains()
Get-ADComputer -filter * | Where-Object{$computerhost.contains($_.name)}
需要小心,因为.contains()
区分大小写。你可以做的一件事是强制你的字符串到同一个案例来删除该问题。
Where-Object{$computerhost.ToUpper().contains($_.name.toUpper())}
也可以使用-match
operatore,请注意它支持正则表达式。这应该不是问题,但如果您的计算机名称有连字符,则需要对其进行转义。
Where-Object{$_.name -match $computerhost}