找到计算机名称的缺少前缀

时间:2018-05-23 20:49:35

标签: powershell active-directory admin

我正在尝试编写一个脚本,该脚本将根据计算机的ID自动查找完整的资产标签。

例如:

PC ID为:PC0001

$computerID = PC0001;

但我需要的完整资产标签是:WKSPC0001

但是这些资产标签可能有不同的前缀,例如DSTPC0002,TBLPC0003等。但它们都有共同的模式:前缀+ PC + ID(ID是唯一的,没有重复)。

我试图弄清楚如何在PowerShell中编写查询,但我无法弄明白。我试过了:

$current = Get-ADComputer -Filter {Name -like "*$computerId.text"} |
           Select -Property Name

但我遇到了让它发挥作用的问题。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

一些观察结果。

  • 您希望$computerId成为字符串,因此$computerID = "PC0001";
  • Get-ADComputer的过滤器表达式应该是一个字符串也是,这里使用花括号是错误的。所以Get-ADComputer -Filter "..."
  • Powershell可以扩展字符串中的变量值,但它只在双引号字符串中执行。 "Name -like '$variable'"会有用,但'Name -like "$variable"'不会。
  • .text变量中没有$computerId。这是一个简单的字符串。

知道了,试试:

$current = Get-ADComputer -Filter "Name -like '*$computerId'"

其他说明

除非你真的必须,否则不要... | Select Name。存储计算机对象本身将更加通用。您可以随时随地$current.Name进行操作。

使用以通配符开头的过滤器查询AD 。尽量避免。

如果您拥有固定数量的可能前缀,则以下LDAP filter会更快

$current = Get-ADComputer -LDAPFilter "(|(cn=WKS$computerId)(cn=DST$computerId)(cn=TBL$computerId))"