我从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-Object
和select -uniq
似乎彼此冲突?
对于那些好奇的$properties
变量只是一个包含以下内容的数组。
$properties =
@(
'DistinguishedName',
'SamAccountName',
'Surname',
'Givenname',
'DisplayName',
'Description',
'EmailAddress',
'HomeDrive',
'HomeDirectory',
'AccountExpirationDate',
'Manager'
)
请告诉我们在哪儿'$ properties'得到定义/分配(或整个剧本甚至)。 –
@ MathiasR.Jessen脚本本身相当长,但我会编辑'$ properties'到问题中。 – BlueBarren
在这种情况下,至少尝试将可以复制问题的[MVCE](https://stackoverflow.com/help/mcve)放在一起 –