1

我正在尝试运行以下 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”迭代一次时,对曾经打印的对象的以下调用在所有进一步的调用中都会被快速处理。 此外,当 '-Properties' 参数从 'Get-ADObject' cmdlet 中排除时,保存到 $query 变量的结果也会得到快速处理!“-Properties”参数似乎导致它变慢,(所以我想它与内存限制无关,考虑到我有足够的可用内存)。

有谁知道:

  1. 为什么会发生这种情况?

  2. 为什么它只在使用-properties 时发生?

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

4

2 回答 2

1

尝试使用该select-object转换$querypscustomobject

$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" | select givenname, mail
于 2012-11-28T16:29:47.013 回答
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的回答。

于 2017-11-10T14:35:56.473 回答