【问题标题】:Issue with trying to pass variable into [adsisearcher]尝试将变量传递到 [adsisearcher] 的问题
【发布时间】:2014-12-23 16:08:40
【问题描述】:

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

基本上我有以下工作并返回我需要的内容:

([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 的部分原因。

谢谢,

大卫

【问题讨论】:

    标签: powershell active-directory ldap dsquery


    【解决方案1】:

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

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

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

    您的原始查询

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

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

    如果没有那些内部引号,查询应该可以工作。

    【讨论】:

    • 嗨,马特,谢谢,效果很好。我最初使用的查询在用户之后有 ),但它仍然不起作用。是不是因为我是想一根线呢?我想让我失望的是它在没有使用 dland* 的变量的情况下工作,但是一旦我引入它就失败了(原始错误是“无法索引到空数组。”只是想了解这里的区别,所以我不会被抓住又来了……
    • @DavidVenthe 查看涵盖您的问题的更新答案。
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 这有什么问题?有错误吗?我测试了它,这个方法有效。
    • 这返回了所有帐户属性,而不仅仅是帐户名称,这不是我想要做的。我想说它“不起作用”是不合适的,而不是我需要的:)
    • 哦,在这种情况下,只需将其括在括号中并使用您已有的“.FindOne().Properties['samaccountname']”语法,或者将结果通过管道传递给 Select-Object 以获得你需要什么。
    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多