如何使用Powershell中的连锁变量过滤AD

时间:2011-09-27 17:00:53

标签: active-directory powershell-v2.0

我正在使用PowerShell v2和Microsoft的AD模块在我们的AD中搜索EmployeeID与特定ID匹配的帐户。 ID通常存储在AD中作为“00000123456”,但我必须搜索的值仅为“123456”部分。问题是我无法弄清楚如何在AD中进行类似搜索。这是我目前的代码

$EmpInfo = Import-csv "PSfile.csv"
$EmplID = EmpInfo.ID 
$EmpAD = get-aduser -Filter {employeeId -like "*$EmplID"} -Properties * -EA Stop

此时,EmpAD始终为空

我可以解决这个问题,方法是在调用Get-ADUser之前修改EmpID以包含“* 123456”,这样可行。但我不禁认为有一个语法问题阻止了明显的方法。解决它的研究毫无结果。

2 个答案:

答案 0 :(得分:1)

如果你的字符串真的在employeeID属性中,你可以测试:

$EmpAD = get-aduser -LDAPFilter "(employeeId=*$EmplID)" -SearchBase 'DC=dom,DC=fr' -Properties *

您可以使用LDP.EXE(或ADSI.EXE)来验证您的目录究竟是什么。

- - - - - - - - 编辑的

对我而言,如果我使用LDIF测试它是有效的:

C:\temp>ldifde -f eid.ldf -d "dc=dom,dc=fr" -r "(employeeId=*)"
Connexion à « WM2008R2ENT.dom.fr » en cours
Connexion en tant qu'utilisateur actuel en utilisant SSPI
Exportation de l'annuaire dans le fichier eid.ldf
Recherche des entrées...
Création des entrées...
3 entrées exportées

有3个对象

在使用AD Cmdlet的PowerShell中,它提供以下内容:

PS C:\>  get-aduser -LDAPFilter "(employeeID=*)" | Measure-Object

    Count    : 3

    $var = "123456"
    PS C:\>  get-aduser -LDAPFilter "(employeeID=*$var)" -properties employeeID

    DistinguishedName : CN=user1 Users,OU=MonOu,DC=dom,DC=fr
    EmployeeID        : 00000123456
    Enabled           : True
    GivenName         : user1
    Name              : user1 Users
    ObjectClass       : user
    ObjectGUID        : b5e5ea59-93a6-4b24-9c3e-043a825c412e
    SamAccountName    : user1
    SID               : S-1-5-21-3115856885-816991240-3296679909-1107
    Surname           : Users
    UserPrincipalName : user1@dom.fr

小心:我不明白为什么,但是在使用MMC修改目录和PowerShell提示符中的结果之间需要一些时间。我重新加载一个新的PowerShell解释器并重新导入AD模块。

答案 1 :(得分:0)

从性能角度来看,如果你知道ID总是一定数量的数字(带有前导零),那么你最好只是提前格式化ID。

如果您的ID应该是11位数,请执行类似$ EmplID.ToString(“D11”)的操作以将其填充。