Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用-Properties时,将Get-ADObject结果保存到变量会变慢_Powershell_Powershell 3.0 - Fatal编程技术网

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

Powershell 使用-Properties时,将Get-ADObject结果保存到变量会变慢,powershell,powershell-3.0,Powershell,Powershell 3.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 "GivenNam

我正在尝试运行以下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
或:

迭代速度非常慢(每个对象大约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变量的结果也会被快速处理参数“-Properties”似乎会导致其速度减慢(因此,考虑到我有足够的可用内存,我猜这与内存限制无关)

有人知道吗

  • 为什么会发生这种情况

  • 为什么只有在使用-properties时才会发生这种情况

  • 如何解决问题/一些解决方法(我不能使用'DirectorySearcher'类,因为无法指定用户运行该类的'LDAP'查询,并且调用'runas'不是一个选项)


  • pscustomobject

    $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
    
    导出变量$query后,可以快速枚举/显示。我正计划再次导入它。。。但后来发现变量中的速度问题消失了


    不过我更喜欢CB的答案。

    你试过使用just get aduser吗?你只需要givenname和mail吗?我需要更多,但为了限制可能是内存问题的风险,我将属性限制在这两个作品中!然而,我仍然很好奇为什么会发生这个错误。也许查询返回了一个包含很多信息的对象。通常我使用Quest cmdlet来完成这类工作。@masi到LDAP服务器的往返可能会有所不同吗?您可以运行NetMon(网络监视器)来获取LDAP数据包跟踪,看看是否是这种情况。不,不是LDAP服务器。现在,它在不到20秒内响应了所有6000个条目。但是,当将它们保存到Powershell中的变量中时,遍历该变量的速度非常慢。
    $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
    
    $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