尝试将变量传递到[adsisearcher]的问题

时间:2014-12-23 16:08:40

标签: powershell active-directory ldap dsquery

如果这很简单,我会提前道歉,但我已经研究了几天,无法自行解决或找到另一条探索路线。

基本上我有下面的工作,并返回我需要的东西:

([adsisearcher]'(&(objectClass=user (samaccountname='*dland*'))').FindOne().Properties['samaccountname']    

返回包含dland的用户名。我想用变量($ usrNme1)替换 dland ,但它在表达式或语句中出现“Unexpected token'$ usrNme1'))'”错误。“

我能够使用ActiveDirectory模块使用以下内容在本地工作:

Get-ADUser -Filter {SAMAccountName -like $usrNme1} | select-object -Property SAMAccountName    

但不幸的是,我不能在这种环境中使用它来对付其他计算机,并且必须找到另一种方式,这就是我已经找到替代品。

这里的任何帮助都将非常感谢:)这是我的最后一块拼图,它令人沮丧,如此接近,无法弄清楚!提前感谢您抽出时间:)

编辑:忘记发表评论,这个脚本将被推出并在Windows 7机器上本地运行,这也是我无法使用Get-ADUser的部分原因。

谢谢,

大卫

2 个答案:

答案 0 :(得分:1)

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

$accountname = "mcame*"
$query = "(&(objectClass=user)(samaccountname=$accountname))"
([adsisearcher]$query).FindOne().Properties['samaccountname']

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

您原始查询

除了支架之外,它不起作用的原因是因为你使用的是单引号。如果你看一下resource,那就继续说

  

比较字符串不会出现在引号中。一个过滤器   displayName'Philipp Foeckeler'的内容如下:   (displayName = Philipp Foeckeler)。

查询应该没有那些内部引号。

答案 1 :(得分:0)

试试这个:

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