ADSI/System.DirectoryServices.DirectorySearcher 结果解析
ADSI/System.DirectoryServices.DirectorySearcher result parsing
一个微不足道的问题,但希望对于那些知道的人来说真的很明显。
搜索构造函数:
$Search = New-Object System.DirectoryServices.DirectorySearcher
(([adsi]"LDAP://ou=Domain Users,dc=example,dc=pri"),'(objectCategory=person)',
('name','employeeID'))
我想排除不存在 employeeID 属性的结果。
这个有效:
$users = $Search.FindAll()
ForEach ($u in $users) {
If ($u.properties.employeeid) {
Write-Host $($u.properties.name)
}
}
以下不起作用 - 无输出。但是,当省略 IF 语句时,会输出结果。
ForEach ($user in $($Search.FindAll())) {
If ($user.properties.employeeID) {
Write-Host $($user.properties.name)
}
}
第二个示例中的语法问题,还是我只需要在 运行 条件语句之前将结果临时存储在对象中?
(为了避免任何关于为什么不使用 ActiveDirectory 模块和 Get-ADUser 的讨论,它适用于不能在其工作站上安装该模块的用户,也不能被授予通过主机上的 PSSession 调用它的权限它已安装。)
更新: 找到了一个更好的方法来处理 where
子句:
$searcher.FindAll() | where { ($_.properties['employeeid'][0]) }
只需删除 if
语句并过滤搜索结果:
$users = $Search.FindAll() | Where-Object {-not [string]::IsNullOrEmpty($_.properties.employeeID)}
一个微不足道的问题,但希望对于那些知道的人来说真的很明显。
搜索构造函数:
$Search = New-Object System.DirectoryServices.DirectorySearcher
(([adsi]"LDAP://ou=Domain Users,dc=example,dc=pri"),'(objectCategory=person)',
('name','employeeID'))
我想排除不存在 employeeID 属性的结果。
这个有效:
$users = $Search.FindAll()
ForEach ($u in $users) {
If ($u.properties.employeeid) {
Write-Host $($u.properties.name)
}
}
以下不起作用 - 无输出。但是,当省略 IF 语句时,会输出结果。
ForEach ($user in $($Search.FindAll())) {
If ($user.properties.employeeID) {
Write-Host $($user.properties.name)
}
}
第二个示例中的语法问题,还是我只需要在 运行 条件语句之前将结果临时存储在对象中?
(为了避免任何关于为什么不使用 ActiveDirectory 模块和 Get-ADUser 的讨论,它适用于不能在其工作站上安装该模块的用户,也不能被授予通过主机上的 PSSession 调用它的权限它已安装。)
更新: 找到了一个更好的方法来处理 where
子句:
$searcher.FindAll() | where { ($_.properties['employeeid'][0]) }
只需删除 if
语句并过滤搜索结果:
$users = $Search.FindAll() | Where-Object {-not [string]::IsNullOrEmpty($_.properties.employeeID)}