代码之家  ›  专栏  ›  技术社区  ›  Our Man in Bananas

PowerShell中Active Directory Get-ADComputer的LDAP查询

  •  10
  • Our Man in Bananas  · 技术社区  · 7 年前

    我有下面的LDAP查询(来自 my previous question answered by Bill_Stewart )在返回所有计算机的脚本中 Get-ADComputer 对于Windows 7,有一些例外情况。

    $computersFilter= "(&(operatingSystem=*Windows 7*)(name=*-*)(!name=V7-*)(!name=*-none)(!name=*-oncall)(!name=*-blackbaud)(!name=sc-win7-1)(!name=ut-swclient-01))" 
    

    它可以很好地与以下调用配合使用 获取ADComputer :

    $computers= Get-ADComputer -LDAPFilter $computersFilter -Property LastLogonDate | Select-Object Name,LastLogonDate 
    $computers | Select Name, LastlogonDate | Export-Csv $ServiceTagsPath -NoTypeInformation
    

    但是,我想让我的查询返回所有使用Windows 7的计算机 及以上 但当我这样改变它时:

    (&(operatingSystem=*Windows 7*)(operatingSystem=*Windows 8*)(operatingSystem=*Windows 10*)
    

    未将任何内容返回到 $computers 变量

    那么,编写LDAP查询以返回所有Windows 7及以上操作系统版本的正确方法是什么呢?

    1 回复  |  直到 7 年前
        1
  •  7
  •   Our Man in Bananas    7 年前

    在Rob在评论中提供了一些帮助,并进行了更多的研究之后,我发现正确的方法是使用 OR ,运算符为 |

    像这样:

    $computersFilter= "(&(|(operatingSystem=*Windows 7*)"
    $computersFilter+= "(operatingSystem=*Windows 8*)"
    $computersFilter+= "(operatingSystem=*Windows 8.1*)"
    $computersFilter+= "(operatingSystem=*Windows 10*))"
    $computersFilter+= "(name=*-*)(!name=V7-*)(!name=*-none)(!name=*-oncall)"
    $computersFilter+= "(!name=*-blackbaud)(!name=sc-win7-1)(!name=ut-swclient-01))" 
    
    $computers= Get-ADComputer -LDAPFilter $computersFilter 
    -Property * | Select-Object Name, OperatingSystem, LastLogonDate 
    
    $computers | Select Name, OperatingSystem, LastLogonDate | 
    Export-Csv $ServiceTagsPath -NoTypeInformation
    

    参考文献:

    IBM LDAP Search Filter Expressions

    MSDN - LDAP Query Basics