如何从具有多个变量的PowerShell中查找Active Directory?

问题描述:

$ADInfo = Get-ADUser -filter {Surname -Like $ntaccount1} | Sort-Object Name 

$ADInfo ` 
    | Format-Table ` 
     @{ Name = "Full Name"; Expression = { $_.name } }, 
     @{ Name = "User ID"; Expression = { $_.samaccountname } } -Autosize; 

这将只搜索Surname(姓氏)的目录,然后输出结果的全名和用户ID。我如何才能找到每个变量而不仅仅是姓氏?我想仿效你在实际的活动目录程序中搜索,但在PowerShell中。如何从具有多个变量的PowerShell中查找Active Directory?

+0

您需要更改“Filter”以考虑您正在查找的所有差异。可能能够使用一个小的散列表,使其更容易。有人可能会有更好的解决方案。 – Matt 2014-12-02 13:43:24

+0

你是什么意思“每个变量”? – 2014-12-02 16:23:39

+0

@AnsgarWiechers在AD中搜索单词“smith”,而不是搜索姓氏,查找名字,用户ID等等。 – Aaron 2014-12-02 16:32:00

我在寻找到其他的想法,但只是为了看看这是你正在寻找我的方向由和LDAP过滤什么我觉得AD查找确实

$searchString = "Matt" 
get-aduser -LDAPFilter "(|(displayName=$($searchString)*)(sn=$($searchString)*)(givenName=$($searchString)*)(cn=$($searchString)*)(samaccountname=$($searchString)*))" 

因此,这将搜索AD中的所有属性和返回用户(如果它们匹配“Matt *”)。遵循相同的逻辑,但让搜索更加可配置以满足您的需求。结果应该与书面结果相同。这样您可以添加/删除要搜索的属性。

$searchString = "Matt" 
$properties = "displayName","sn","givenName","cn","samaccountname" 
$ldapFilter = "(|$($properties | ForEach-Object{"($_=$($searchString)*)"}))" 

Get-Aduser -LDAPFilter $ldapFilter 

使用简单过滤嘴

无论出于何种原因-LDAPFilter不为你工作。我们可以使用类似的逻辑来获得-Filter的工作。属性名称将更改为与PowerShell筛选器相匹配

$searchString = "Matt" 
$properties = "FirstName","LastName","Name","DisplayName","SamAccountName" 
$Filter = ($properties | ForEach-Object{"($_ -Like '$searchString*')"}) -Join " -Or " 

Get-Aduser -Filter $Filter 
+0

-LDAPFilter是否使用LDAP?我们正在尽快为AD广泛推广LDAP。我需要执行Get-ADUser -filter {samaccountname - 包含“stepanik”},但它表示-contains的运算符无效。如果这有效,那将是完美的。 – Aaron 2014-12-02 16:39:24

+0

'-LDAPFilter'使用支持各种产品的LDAP协议。是的,这是AD的工作。我的环境是AD Functional level 2008 r2 – Matt 2014-12-02 16:44:27

+0

'-Contains'用于检查包含成员的数组。 http://windowsitpro.com/blog/powershell-contains。我将为'-Filter'做这项工作# – Matt 2014-12-02 16:45:42