Powershell 如何使用get-ADComputer筛选器获取所有部分匹配?

Powershell 如何使用get-ADComputer筛选器获取所有部分匹配?,powershell,active-directory,wildcard,Powershell,Active Directory,Wildcard,我有以下PowerShell脚本 $server = Get-ADComputer -filter {name -like $computerhost} write-host $server.name 它给了我一台ADComputer,它的名称中包含$computerhost 例如: $computerhost = linuxserver 匹配计算机名称输出:“linuxserver01” 但是,如果一台计算机的名称适合$computerhost的话,我实际上想要一台ADComputer。

我有以下PowerShell脚本

$server = Get-ADComputer -filter {name -like $computerhost}
write-host $server.name
它给了我一台ADComputer,它的名称中包含
$computerhost

例如:

$computerhost = linuxserver
匹配计算机名称输出:“linuxserver01”


但是,如果一台计算机的名称适合
$computerhost
的话,我实际上想要一台ADComputer。因此,如果$computerhost是“asdf”,我想得到名为“a”或“as”或“asd”或“asdf”的计算机,而不是“asda”

例如:

$computerhost = linuxserver (new)
匹配计算机名称输出:“linuxserver”



我不知道如何以这种方式使用通配符。

感谢您通过评论进行澄清。我想这可能就是你想要的:

Get-ADComputer -filter * | where-object { $computerhost -like "*$($_.name)*" }
例如(我在这里使用$computers来代替get-adcomputer):

返回:

a

作为

自闭症

asdf


如果要查找字符串的部分匹配项,
$computerHost
筛选器将不会处理该问题,因为它无法正确转换为LDAP查询。返回选择集中的所有计算机后,必须处理该筛选器。如果您有一个大型的计算机库,您可以使用
-SearchScope
等参数来减少这种情况。最简单的方法是使用
.contains()

需要小心,因为
.contains()
区分大小写。您可以做的一件事是强制将两个字符串都放在同一个案例中,以消除该问题

Where-Object{$computerhost.ToUpper().contains($_.name.toUpper())}
也可以使用
-match
运算符,或者注意它支持正则表达式。这不应该是一个问题,但如果你的计算机名有连字符,他们将需要转义

Where-Object{$_.name -match $computerhost}

但我实际上想要ADComputer,它可以安装在$computerhost中。我真的不知道你这是什么意思?您只想从
$computerhost
中搜索部分名称?那么,您如何决定删除什么?如果广告中的计算机名称包含在$computerhost中。因此,如果$computerhost是“asdf”,我想得到名为“a”或“as”或“asd”或“asdf”的计算机,但不是“asda”。谢谢你的回答。如果我有一个Active Directory之外所有计算机的列表,这就行了。我必须创建一个包含广告中所有计算机的列表,还是有一种简单的方法可以直接使用广告来创建列表?@Dave494这就是这个答案中第一行代码的目的。第二个是概念证明谢谢你的回答,马特。我只是用一台现有的计算机尝试了一下,并添加了asdf。没用。在没有添加任何内容的情况下使用现有计算机进行了尝试。没用。我做错什么了吗?没必要,我已经知道了。必须这样做:获取ADComputer-filter*| where对象{$computerhost-like“*$($.name)*”}无论如何谢谢你
Where-Object{$computerhost.ToUpper().contains($_.name.toUpper())}
Where-Object{$_.name -match $computerhost}