代码之家  ›  专栏  ›  技术社区  ›  Celestialchippy

你能用-filter on get aduser过滤掉空字段吗?

  •  2
  • Celestialchippy  · 技术社区  · 7 年前

    当从active directory获取数据并将其插入sql表时,是否有办法过滤掉空字段?当我使用 -Filter Get-ADUser 我认为这不是正确的语法。

    它不能说

    无法将输入对象绑定到该命令的任何参数,因为该命令不接受管道输入,或者该输入及其属性与接受管道输入的任何参数都不匹配

    $ADARRAY = (Get-ADGroupMember -Identity "Domain Users" -Recursive |
               Get-ADUser -Filter {-not (Mail -like "*")} -Properties Mail)
    
    foreach($OBJECT in $ADARRAY) {
        $NAME = $OBJECT.Name 
        $USER = $OBJECT.SamAccountName
        $EMAIL = $OBJECT.Mail
    
        $INSERT = "INSERT $TABLE VALUES ('$USER','$EMAIL', '$NAME')"
        $SQL.CommandText = $INSERT 
    
        $SQL.ExecuteNonQuery()
    }
    
    $SQLCON.Close()
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Ansgar Wiechers    7 年前

    你收到错误信息是因为 Get-ADUser 可以 任何一个 从管道读取输入 使用参数 -Filter 。如果你看看 documentation 您将看到该cmdlet有3个参数集:

    Get-ADUser
       [-AuthType <ADAuthType>]
       [-Credential <PSCredential>]
       -Filter <String>
       [-Properties <String[]>]
       [-ResultPageSize <Int32>]
       [-ResultSetSize <Int32>]
       [-SearchBase <String>]
       [-SearchScope <ADSearchScope>]
       [-Server <String>]
       [<CommonParameters>]
    
    Get-ADUser
       [-AuthType <ADAuthType>]
       [-Credential <PSCredential>]
       [-Identity] <ADUser>
       [-Partition <String>]
       [-Properties <String[]>]
       [-Server <String>]
       [<CommonParameters>]
    
    Get-ADUser
       [-AuthType <ADAuthType>]
       [-Credential <PSCredential>]
       -LDAPFilter <String>
       [-Properties <String[]>]
       [-ResultPageSize <Int32>]
       [-ResultSetSize <Int32>]
       [-SearchBase <String>]
       [-SearchScope <ADSearchScope>]
       [-Server <String>]
       [<CommonParameters>]
    

    其中的第二个用于从 Get-ADGroupMember (通过参数 -Identity ,但在指定参数时 滤波器 您正在强制使用第一个,它不接受您的管道输入。

    另外,根据代码判断,您实际上希望用户对象 有一个 mail 属性。

    使用A Where-Object 这样的过滤器和代码应该做您想要的:

    $ADARRAY = Get-ADGroupMember -Identity 'Domain Users' -Recursive |
               Get-ADUser -Properties Mail |
               Where-Object { $_.Mail -like '*' }
    

    如果您真的希望用户对象 不要 有一个 邮件 属性更改条件 $_.Mail -like '*' $_.Mail -notlike '*'

        2
  •  2
  •   hsimah    7 年前

    你很接近,但是 Filter 接受不是脚本块的筛选字符串(try Get-Help Get-ADUser )

    这应该能满足你的需要:

    Get-ADUser -Filter "Mail -notlike '*'"
    

    This page explains more on the filter syntax for AD.