从Active Directory中获取数据并将其插入SQL表时,有没有一种方法可以过滤掉空字段?当我在Get-ADUser
上使用-Filter
时,我认为这不是正确的语法。
它不能说
无法将输入对象绑定到命令的任何参数,因为命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配
$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()
发布于 2018-06-15 16:04:26
之所以会收到这个错误消息,是因为Get-ADUser
可以使用参数从管道中读取输入,也可以使用参数。如果您查看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
属性的user对象。
使用像这样的Where-Object
过滤器,代码应该可以执行您想要的操作:
$ADARRAY = Get-ADGroupMember -Identity 'Domain Users' -Recursive |
Get-ADUser -Properties Mail |
Where-Object { $_.Mail -like '*' }
如果您确实想要没有mail
属性的用户对象,请将条件$_.Mail -like '*'
更改为$_.Mail -notlike '*'
。
发布于 2018-06-15 08:30:35
很接近,但是Filter
接受一个过滤器字符串,而不是脚本块(试试Get-Help Get-ADUser
)。
这应该会让你得到你需要的:
Get-ADUser -Filter "Mail -notlike '*'"
https://stackoverflow.com/questions/50867371
复制相似问题