2017-07-17 52 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 
}