我正在尝试运行以下cmdlet并将其输出保存到我的$ query变量中。
$query = Get-ADObject -Server $ldapServer -Credential $account -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -SearchBase $ldapDN -Properties "GivenName", "Mail"
LDAP查询运行得很好(在6000+ LDAP数据库上大约10秒)。返回的结果集包含大约150个用户对象。当尝试迭代$ query变量时会发生奇怪的事情:
$query
或者:
foreach($object in $query){$object}
迭代非常缓慢(每个对象约10-30秒)
当查询未保存到变量时,一切正常而快速,如运行命令:
Get-ADObject -Server $ldapServer -Credential $account -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -SearchBase $ldapDN -Properties "GivenName", "Mail"
使用格式化cmdlet时也是如此:
$query = Get-ADObject -Server $ldapServer -Credential $account -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -SearchBase $ldapDN -Properties "GivenName", "Mail" | ft
但是,我需要'对象'来进行迭代。所以保存文本输出对我没有帮助。
更令人困惑的是,当通过调用'$ query'进行一次迭代时,对所有进一步调用中的一次打印对象的以下调用将被快速处理。
此外,当从'Get-ADObject'cmdlet中排除'-Properties'参数时,保存到$ query varible的结果也会快速处理!'-Properties'参数似乎会导致它减速,(所以我猜它与内存限制无关,考虑到我有足够的可用内存)。
有人知道吗:
为什么会这样?
为什么只有在使用-properties时才会发生?
如何解决问题/一些解决方法(我无法使用'DirectorySearcher'类,因为无法指定用户为该类运行'LDAP'查询,并调用'runas'不是一种选择。)
答案 0 :(得分:1)
尝试在select-object
$query
的{{1}}
pscustomobject
答案 1 :(得分:1)
$query = Get-ADObject -Server $ldapServer -Credential $account `
-LDAPFilter "(&(objectCategory=Person)(objectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=2))" -SearchBase $ldapDN `
-Properties "GivenName", "Mail"
$query| Export-Clixml c:\temp\myquery.xml
导出变量后,$ query将快速枚举/显示。我打算再次导入它......但后来发现变量中的速度问题已经消失了。
但是我更喜欢CB的答案。