【问题标题】:How to filter AD with a concatenated variable in Powershell如何在 Powershell 中使用串联变量过滤 AD
【发布时间】:2011-09-27 17:00:53
【问题描述】:

我正在使用 PowerShell v2 和 Microsoft 的 AD 模块在我们的 AD 中搜索其 EmployeeID 与特定 ID 匹配的帐户。 ID 通常以“00000123456”的形式存储在 AD 中,但我必须搜索的值只是“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”来解决此问题,这很有效。但我不禁认为有一个语法问题阻止了明显的方法。解决这个问题的研究没有结果。

【问题讨论】:

    标签: active-directory powershell-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 模块。

    【讨论】:

    • 如果存储的值为 0000123456,“(employeeId=*$EmplID)”是否匹配?我正在使用(好吧,无论如何尝试) * 来匹配 -like 运算符。它可以与 = 一起使用吗?
    • 谢谢@JP。我今天会测试一下
    【解决方案2】:

    从性能的角度来看,如果您知道 ID 始终是一定数量的数字(带有前导零),那么提前格式化 ID 会更好。

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

    【讨论】:

    • 我们将更新 900 个帐户,每周一次,所以我不太关心性能。至于填充,我正在努力证明这一点。如果我不需要将employeeID 填充到完整长度,我宁愿不需要它,因为它只会导致不必要的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多