Powershell 尝试将变量传递到[adsisearcher]时出现问题

Powershell 尝试将变量传递到[adsisearcher]时出现问题,powershell,active-directory,ldap,dsquery,Powershell,Active Directory,Ldap,Dsquery,如果这是一件简单的事情,我提前表示歉意,但我已经研究了几天,无法独自解决或找到另一条探索的途径 基本上,我有以下功能,可以正常工作并返回我所需的内容: ([adsisearcher]'(&(objectClass=user (samaccountname='*dland*'))').FindOne().Properties['samaccountname'] 返回其中包含dland的用户名。我想用变量($usrNme1)替换dland,但它在表达式或语句中错误为“意外标记'$u

如果这是一件简单的事情,我提前表示歉意,但我已经研究了几天,无法独自解决或找到另一条探索的途径

基本上,我有以下功能,可以正常工作并返回我所需的内容:

([adsisearcher]'(&(objectClass=user (samaccountname='*dland*'))').FindOne().Properties['samaccountname']    
返回其中包含dland的用户名。我想用变量($usrNme1)替换dland,但它在表达式或语句中错误为“意外标记'$usrNme1'))”

通过使用ActiveDirectory模块,我可以通过以下方式使其在本地工作:

Get-ADUser -Filter {SAMAccountName -like $usrNme1} | select-object -Property SAMAccountName    
但不幸的是,在这种环境下,我不能用它来对付其他计算机,我必须找到另一种方法,这是我找到替代品的最远距离

这里的任何帮助都将不胜感激:)这是我的最后一块拼图,它令人沮丧的是如此接近而无法理解它!提前感谢您抽出时间:)

编辑:忘记注释了,这个脚本将被推出并在windows 7机器上本地运行,这也是我不能使用Get ADUser的部分原因

谢谢

大卫

试试这个:

$foo = '*jsm*'
([adsisearcher]"(&(objectClass=user) (samaccountname=$foo))")

您的查询的格式有点不正确,因为它在
user
之后缺少一个括号,但是您可以像下面的示例一样轻松地将变量放入字符串中。放在双引号内的变量将展开得很好*(大多数情况下。对象参数需要子表达式)

注意:如果您查看,您将看到您正在进行的通配符搜索中出现的问题。如果您有一个大型组织,您可能需要重新考虑使用前导星号和尾随星号或其他复数形式

您可以选择原始查询

除了括号外,它不起作用的原因是因为您使用了单引号。如果你看这个,它会继续说

比较字符串不会出现在引号中。过滤器 显示名称“Philipp Foeckeler”的内容如下: (displayName=Philipp Foeckeler)


查询应该在没有这些内部引号的情况下运行

嗨,马特,谢谢你,效果很好。我最初使用的查询在用户之后仍然不起作用。是因为我试着用一条线吗?我想让我感到不快的是,它在没有使用dland*变量的情况下工作,但在引入变量后失败了(最初的错误是“无法索引到空数组中”只是想理解这里的区别,这样我就不会再被它抓住了…@davidventh看到更新的答案涵盖了你的问题。这有什么不起作用?有错误吗?我测试了它,这个方法有效。它返回了所有帐户属性,而不仅仅是帐户名,这不是我想要做的。我s说它“不起作用”是不恰当的,但这不是我需要的:)哦,在这种情况下,只需将它括在括号中,并使用您已有的“.FindOne().Properties['samaccountname']”语法,或者通过管道将结果发送到Select Object以获得所需的内容。
$accountname = "mcame*"
$query = "(&(objectClass=user)(samaccountname=$accountname))"
([adsisearcher]$query).FindOne().Properties['samaccountname']