使用-Properties时,将Get-ADObject结果保存到变量会变慢

时间:2012-11-28 16:14:20

标签: powershell powershell-v3.0

我正在尝试运行以下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'参数似乎会导致它减速,(所以我猜它与内存限制无关,考虑到我有足够的可用内存)。

有人知道吗:

  1. 为什么会这样?

  2. 为什么只有在使用-properties时才会发生?

  3. 如何解决问题/一些解决方法(我无法使用'DirectorySearcher'类,因为无法指定用户为该类运行'LDAP'查询,并调用'runas'不是一种选择。)

2 个答案:

答案 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的答案。