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

Find missing prefix for computer name

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

例如:

PC ID 是:PC0001

$computerID = PC0001;

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

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

我想知道如何在 PowerShell 中为此编写查询,但我想不出来。我试过:

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

但是我在让它工作时遇到了问题。

我做错了什么?

几点观察。

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

知道了,试试:

$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))"