2017-07-17 49 views
0

我从Active Directory中检索用户列表,对它们进行评估并对​​它们进行分类。评估很简单,就像Manager字段是否为空。在像我之前提到的那样进行一些评估之后,我将'错误'对象分成了一个数组(当我说'错误'时,我的意思是他们不符合我正在评估的标准,就像经理字段为空)。有趣的是,我错误的对象数组不准确,它已经增加了6个对象使得它的总数为7.我验证了这个echo数组,然后echo.Length看到,我应该只在哪里有一个不正确的条目我有7.一个有趣的信息是,其他6个项目是空白的,因为当我echo阵列我只看到单个条目我期望看到,但长度仍然是7.Where-Object和Select -Uniq引起冲突结果

现在我并不总是得到这种行为,以前我得到了我的预期结果。改变之处在于我添加了Where-Object,因为我之前没有,因此我需要排除OU。我的Get-ADUser声明目前如下。

$users += Get-ADUser -SearchBase "OU=Users,DC=workplace,DC=org" -LDAPFilter "(&(SamAccountName=SE*)(!SamAccountName=*SO))" -ResultSetSize 5000 -Properties $properties | Select $properties | Where-Object {$_.distinguishedname -notlike "*,OU=DisabledUsers,*"}; 

本身工作正常的声明,我不再获得来自OU我想省略用户。但是,添加Where-Object似乎与我之前在脚本中使用的一条线相冲突。该行是以下内容。

$incorrectUsers = $incorrectUsers | select -uniq 

由于我前面提到的,我会得到一些用户对象出现不止一次,我不希望发生的事情进行评价的性质,所以我使用的select -uniq只看到数组中的唯一项目。但在添加Where-Object后,我得到了上面列出的差异。然后我注释掉select -uniq上方,我得到的结果,我期待,1个不正确的用户和不正确的用户的阵列($incorrectUsers)仅有的1

的长度对我来说这表明,有两个之间的一些冲突声明。所以我很好奇,为什么一个阵列上的Where-Objectselect -uniq似乎彼此冲突?

对于那些好奇的$properties变量只是一个包含以下内容的数组。

$properties = 
@( 
    'DistinguishedName', 
    'SamAccountName', 
    'Surname', 
    'Givenname', 
    'DisplayName', 
    'Description', 
    'EmailAddress', 
    'HomeDrive', 
    'HomeDirectory', 
    'AccountExpirationDate', 
    'Manager' 
) 
+0

请告诉我们在哪儿'$ properties'得到定义/分配(或整个剧本甚至)。 –

+0

@ MathiasR.Jessen脚本本身相当长,但我会编辑'$ properties'到问题中。 – BlueBarren

+0

在这种情况下,至少尝试将可以复制问题的[MVCE](https://stackoverflow.com/help/mcve)放在一起 –

回答

0

这似乎并不符合这两项声明冲突一起,而是与阵列上使用select -uniq只有1项的冲突。我添加了另一个模仿在问题中讨论过的用户,并且我不再收到一个膨胀的长度。正因为如此,我周围添加语句的if只被执行时,数组的长度大于1,像这样

if($incorrectUsers.Length -gt 1){ 
    $incorrectUsers = $incorrectUsers | select -uniq 
}