2015-09-16 191 views
0

寫了一個小腳本來檢查某些AD組是否存在。出於某種原因,它不會遍歷給定的數組。它只將數組的第一個值寫入控制檯。當我把一個斷點:if語句中的foreach循環

foreach ($item in $SecGroupNames) 

我看到$ secGroupNames正在填充給值,任何人都可以幫我嗎?無法解決這個問題。

代碼:

Import-Module activedirectory 
$SecGroupNames = @( 
        "DB_DATAREADER", 
        "DB_DATAWRITER", 
        "DB_OWNER", 
        "SQL_Public", 
        "SQL_SA", 
        "SQL_SecurityAdmin" 
       ) 

    foreach ($item in $SecGroupNames) 
     { 
     If (Get-ADGroup $item) 
     {  
      Write-Host -ForegroundColor Yellow "$item Exists!" 
      return $true; 
     } 
     else 
     { 
      Write-Host -ForegroundColor Green "$Item Does not exist, Do something!" 
      return $false; 
     } 
     } 

輸出:

PS C:\Scripts\CreateOUgroups> C:\Scripts\CreateOUgroups\FunctionCheckSecurityGroup.ps1 
DB_DATAREADER Exists! 
True 

回答

3

這是因爲return語句。它會導致腳本返回值並在第一個循環中結束執行。

如果要從腳本或函數返回多個值,請使用Write-Output而不是return

foreach ($item in $SecGroupNames) 
{ 
    if (Get-ADGroup $item) 
    {  
    Write-Host -ForegroundColor Yellow "$item Exists!" 
    Write-Output $true; 
    } 
    else 
    { 
    Write-Host -ForegroundColor Green "$item Does not exist, Do something!" 
    Write-Output $false; 
    } 
} 
+0

我調整了我的代碼,雖然我得到它不寫我的控制檯上的完整數組。它循環6次,結果相同: DANNY_DB_DATAREADER存在! 真 DANNY_DB_DATAREADER存在! 真 DANNY_DB_DATAREADER存在! 真 DANNY_DB_DATAREADER存在! 真 DANNY_DB_DATAREADER存在! 真 DANNY_DB_DATAREADER存在! True – MrPowerUser

+2

@doenoe在''$ iets Exists!「這個問題中有一個拼寫錯誤,在你的代碼中呢?這會使得每次循環的價值都不會改變 – Matt

+0

愚蠢的錯字。調整後的代碼到$ item。訣竅!非常感謝! – MrPowerUser