2013-12-09 26 views
1

我想要做的是創建一個Ou表並將一個數值分配給內存。如果ou被刪除,我希望它從哈希表中刪除。如果創建了新的ou,我希望它添加到散列表。但我想它來填充,例如缺少的數值,如果我有1至5個,但3刪除了我希望將新值添加到3或者,如果他們都在那裏加入像6我想在powershell中創建ou的散列表

function Set-ZLGroupTable{ 
    $ADOU = (Get-ChildItem "AD:\$OUath").Name 
    $GroupTable = @{} 
    foreach($GroupName in $ADOU){ 
    for($count = 0 ; $count -le $ADOU.count; $count++){ 
     if(!($GroupTable.contains($GroupName))){ 
      if(!($GroupTable.Keys($count))){ 
       $GroupTable[$count] = "$GroupName" 
       }else{ 
        $GroupTable[($ADOU.count++)] = "$GroupName" 
       } 
      } 
    } 
    } 
    Write-Output $GroupTable 

} 

回答

0
新號碼

您的原始代碼有幾個問題。

首先,你需要獲得OU名稱列表方式如下:

$ADOU = (Get-ChildItem "AD:\$OUPath")|Select -ExpandProperty Name 

你的哈希表的使用似乎並不正確。下面這行沒有確定,如果OU名稱存在作爲grouptable將一個值:

if(!($GroupTable.contains($GroupName))){ 

爲了確定您需要做的線沿線的東西:

if(!($GroupTable.Values -contains $GroupName)){ 

在您原先的規範說你希望保留訂單,但是如果刪除了一個OU,該數字仍然可用於下一個可用的OU名稱佔用。您上面提供的腳本將OU添加到下一個可用號碼中,無論它是否被佔用。你需要做的是首先從源列表中刪除已存在於哈希表中的所有項目,然後枚舉剩餘的項目並通過計數增加,直到找到放置它的地方。另外,爲了釋放這些密鑰,我們應該首先進行刪除操作,以便稍後插入這些密鑰。類似這樣的:

#First we remove items from our list that don't exist in $ADOU 
foreach ($key in $GroupTable.Keys){ 
    if (!($ADOU -contains $GroupTable."$key")){ 
    $GroupTable.Remove($key) 
    } 
} 
#Next we check if the remaining items already exist in the GroupTable 
foreach ($GroupName in $ADOU) 
{ 
    if(($GroupTable.Values -contains $GroupName)){ 
    #It's already in the GroupTable. Let's not do anything further with it 
    $ADOU=$ADOU -ne "$GroupName" 
    } 
} 
#Finally, insert any new OU's into the available GroupTable List: 
#Keep increasing the counter until the ADOU array is empty 
for ($count = 0; $ADOU.Count -gt 0; $count++) 
{ 
    if ($GroupTable."$count" -eq $null) 
    { 
    #Add the OU to the table 
    $GroupTable."$count" = $ADOU[0] 
    #Remove the OU from the list 
    $ADOU=$ADOU -ne $ADOU[0] 
    } 
} 

Hashtable輸出的問題是鍵很少按順序打印。在我自己的環境中測試這個我得到5,0,4,6,1,2,3作爲我的訂單。

我希望有幫助。

謝謝,克里斯。