有没有办法在从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()
答案 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 '*'"