好吧,我对语法一无所知。图。如果有人可以用另一双好的眼睛帮助我,我将不胜感激。下面是我的脚本,下面是返回我要寻找的值的那根班轮。该脚本不会返回任何内容。
脚本
$BBUIDS = Get-Content 'C:\working\ad\Userstest.txt'
ForEach ($Name in $BBUIDS)
{
Get-ADComputer -Filter 'Description -like $("$Name")' -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN
}
单线工作
Get-ADComputer -Filter 'Description -like "USERNAMEHERE"' -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN
答案 0 :(得分:1)
仅当您使用双引号时,PowerShell才会在引号内扩展变量。关于quoting rules的文档对此进行了描述:
当您将字符串用双引号引起来(用双引号引起来的字符串)括起来时,前面带有美元符号($)的变量名将替换为变量的值
您可以在PowerShell提示中对此进行测试:
$Name = "username"
'This is wrong: $Name'
"This is right: $Name"
输出将是:
This is wrong: $Name
This is right: username
您会注意到,PowerShell甚至会在使用双引号而不是单引号时突出显示$Name
。
因此,您需要这样的东西:
Get-ADComputer -Filter "Description -like '$Name'" -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object C
双引号内的单引号可以。您只需要将外部引号作为双引号即可。
或者,
Get-ADComputer -Filter {Description -like "$Name"} -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,MYDOMAIN" | Select-Object CN
此外,我注意到您正在使用-like
,但是您没有使用任何通配符(*
)。 Description
完全与用户名匹配吗?如果是这样,可以使用-eq
代替-like
来获得更好的性能。
如果不完全匹配,则应该使用"*$Name*"
。
答案 1 :(得分:0)
更改:
Get-ADComputer -Filter 'Description -like $("$Name")' ...
收件人:
$Name = "*$Name*"
Get-ADComputer -Filter {Description -like $Name} ...
根据评论进行编辑
$BBUIDS = Get-Content 'C:\working\ad\Userstest.txt'
ForEach ($Name in $BBUIDS) {
$Name = "*$Name*"
Get-ADComputer -Filter {Description -like $Name} -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,MYDOMAIN" | Select-Object CN
}
答案 2 :(得分:0)
您可以使用其中任何一个,尽管第一个更有效
Get-ADComputer -Filter {Description -like "*$Name*"} -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN
或
Get-ADComputer -Filter * -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" |where-object {$_.Description -like "*$Name*"} | Select-Object CN