2

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

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

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

谢谢,

大卫

4

2 回答 2

1

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

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

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

你原来的查询

除了括号之外,它不起作用的原因是因为您使用了单引号。如果您查看此资源,它会继续说

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

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

于 2014-12-23T16:43:27.333 回答
0

尝试这个:

$foo = '*jsm*'
([adsisearcher]"(&(objectClass=user) (samaccountname=$foo))")
于 2014-12-23T16:40:05.983 回答