【问题标题】:Searching for several Operating Systems with Get-ADComputer using LDAP Filter使用 LDAP 过滤器通过 Get-ADComputer 搜索多个操作系统
【发布时间】:2018-04-18 08:44:22
【问题描述】:

我正在使用下面的代码通过Get-ADComputer 获取 Active Directory 信息,它工作正常

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

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

我还想检索操作系统高于 Windows 7(Windows 8、8.1 和 Windows 10)的计算机,但是当我像这样更改过滤器时:

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

没有任何内容返回到 $computers 变量中

那么正确的方法是什么?

【问题讨论】:

    标签: powershell scripting active-directory


    【解决方案1】:

    您定义$computersFilter 的方式,如果您查看它的类型,您会发现它是string 类型。因此它不会返回任何东西。

    PS C> $computersFilter = "(&(operatingSystem=*Windows7*))(name=*-*)(!name=V7-*)(!name=*-none)(!name=*-oncall)(!name=*-blackbaud)(!name=sc-win7-1)(!name=ut-swclient-01))"
    PS C> $computersFilter.GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    

    $computersFilter 应该声明为一个数组,这样-LDAPFilter 参数就可以针对对象的集合进行评估,就像这样 -

    PS C>$computersFilter = @("operatingSystem=*Windows7*", "name=*-*", "!name=V7-*", "!name=*-none", "!name=*-oncall", "!name=*-blackbaud", "!name=sc-win7-1", "!name=ut-swclient-01")
    PS C> $computersFilter.GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Object[]                                 System.Array
    

    【讨论】:

    • 谢谢,但我真的需要帮助来获得几个操作系统版本 - Windows 7 及更高版本......这就是我遇到问题的部分
    • 您可以将其添加为新问题,我们很乐意为您提供帮助! :)
    • 这是这个问题的意图 - 在标题中我说,虽然这个问题措辞不佳......
    • -LDAPFilter 指定一个 LDAP 查询字符串。建议它必须是一个数组是没有意义的。使用的查询字符串是错误的,不是它的类型。
    • @rene - 你说的是真的,但我的意思是当 OP 的 $computersFilterstring 类型时,PowerShell 会将整个 $$computersFilter 视为一个字符串而不是一个字符串收藏。因此,他没有得到任何输出。但是当他将$computersFilter 定义为字符串集合时(但$computersFilter 变为数组类型),LDAPFilter 能够遍历集合。如果我在这里有任何意义,请告诉我。
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2016-08-04
    • 2013-09-24
    • 2013-11-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多