你可以在Get-ADUser上使用-Filter过滤掉空字段吗?

时间:2018-06-14 23:44:35

标签: powershell active-directory

有没有办法在从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 个答案:

答案 0 :(得分:3)

您收到该错误消息是因为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)读取管道输入,但在指定参数-Filter时,您强制使用第一个,它不接受您的管道输入。

另外,从您的代码判断,您实际上希望的用户对象具有mail属性。

使用像这样的Where-Object过滤器,代码应该按照您的意愿执行:

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

如果您确实希望具有mail属性的用户对象将条件$_.Mail -like '*'更改为$_.Mail -notlike '*'

答案 1 :(得分:2)

您已关闭,但Filter采用过滤字符串而非脚本块(尝试Get-Help Get-ADUser)。

这可以满足您的需求:

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

This page explains more on the filter syntax for AD.