如果这很简单,我会提前道歉,但我已经研究了几天,无法自行解决或找到另一条探索路线。
基本上我有下面的工作,并返回我需要的东西:
([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的部分原因。
谢谢,
大卫
答案 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))")