2012-03-13 51 views
0

我正在尝试编写一个简单的powershell脚本。Get-AdUser中的Powershell变量

Get-ADuser -Filter {GivenName -eq $GivenName $hateList} -SearchBase $Container -Properties displayName,telephoneNumber,department|ForEach-Object {"FullName`t: $($_.displayName)`r`nPhone`t`t: $($_.telephoneNumber)`r`nDepartment`t: $($_.department)`r`n"} 

什么,我得到了错误: 获取-ADUser便有:错误解析的问题: '给定名称当量$给定名称$ hateList' 错误信息: '语法错误' 的位置: '26'。

所以问题是变量没有被它们的值替代。我做错了什么?

回答

1

You Filter参数不正确。如果你想有给定名称等于$给定名称,你应该做这样的:

{GivenName -eq $GivenName} 

如果你希望它是等于$给定名称或$ hateList,不管它是什么,你应该尝试类似:

{(GivenName -eq $GivenName) -or (GivenName -eq $hateList)} 

检查此链接更多的过滤器: http://technet.microsoft.com/en-us/library/ee617241.aspx

你可以先拿到用户的列表与这样的过滤器:

{GivenName -eq $GivenName} 

而做一些后期处理:

$users | Where-Object { $hateList -notcontains $_.cn } 
+0

@adam_gav如果你很高兴与答案,然后请接受它。它旁边有复选框 – 2012-03-13 08:52:49

+0

感谢您的快速回复! 我想检查GivenName在变量中是否相同,而仇恨列表包含一个字符串,如下所示: -and cn -ne“foo”-and cn -ne“bar”-and cn -ne“blabla “ 所以它会检查cn不等于几个字符串。 我该如何放置圆括号? 我试图修改以使仇恨列表如下:-and(cn -ne“foo”)和(cn -ne“bar”) - 和(cn -ne“blabla”) 如何制作过滤器?我尝试了以下方法,但它当然不起作用:-Filter {(GivenName -eq $ GivenName)$ hateList} – 2012-03-13 09:05:46

+0

正确,如果您需要验证GivenName不是$ hateList之一,那么您需要将其分解为多个条件。我不认为 - 在这里包含作品。 – 2012-03-13 09:46:48

0

如果传递变量时,变量扩展不工作,试图通过它用引号括起来:

{GivenName -eq "$GivenName"} 
+1

它的工作,但主要问题是仇恨列表。如果我了解它,我需要进行以下操作: -Filter {(GivenName -eq“blabla”) - 和(cn -ne“alma”) - 和(cn -ne“korte”) - 和(cn -ne“ (GivenName -eq“blabla”) - 和(cn -ne“alma”) - 在我的上下文中: (GivenName -eq'“$ GivenName'”)$ hateList“ 产生此:和(cn -ne“korte”) - 和(cn -ne“bela”) 但我无法弄清楚我是否可以在过滤器中使用t – 2012-03-13 09:23:43

+0

您可能最好使用ldap过滤器GivenName,然后对结果使用PS条件:{GivenName -eq $ GivenName} |其中{$ hatelist -notcontains $ _。CN} – mjolinor 2012-03-13 11:13:58