查找缺少的计算机名称前缀
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))"
我正在尝试编写一个脚本,它会根据计算机的 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))"