我從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)放在一起 –