2015-09-16 146 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