具有多个数组的ForEach-Loop

时间:2019-06-13 13:16:04

标签: powershell foreach active-directory

我目前有4个数组,其Active Directory中的组织单位名称不同。

因此,我进行了大量评估,为了不为每个数组创建单独的ForEach循环(因为这就像400行代码),我想将整个过程放在一个循环中。

但是,我需要知道运行哪个数组的时间,以便可以通过IF查询在某些位置更改此数组的内容。

那是因为并非所有数组都可以这种方式使用代码,例如,必须为每个数组更改Active Directory查询的搜索库。

在这里,我创建了一个示例,并在评论中描述了我的问题。 (<##>)




$OU1="1-Users","2-Users","3-Users"
$OU2="1-Computers","2-Computers","3-Computers"
$OU3="1-ServiceAccounts","2-ServiceAccounts","3-ServiceAccounts"

foreach ($ou in $OU1 <#AND OU2,OU3#> ){

if($OU1,$OU2 <#= active#> ){

 <# if this array is active - do this code #>
 $SearchBase = "OU="+$ou+",OU=SUBOU,DC=intra,DC=lan"

}

if($OU3 <#= active#>){

 <# if this array is active - do this code #>
$SearchBase = "OU="+$ou+",DC=intra,DC=lan"

}


 <# do this code for all #>

}

希望您能理解我的意思,并且可以帮助我解决我的问题。谢谢。

2 个答案:

答案 0 :(得分:1)

Lee_Dailey的意思是:首先用正确的设置创建一个哈希表,然后对其进行迭代:

$ouList = @(
    @{ "SearchBase" = "OU=SUBOU,DC=intra,DC=lan"; "OUs" = @("1-Users","2-Users","3-Users") },
    @{ "SearchBase" = "OU=SUBOU,DC=intra,DC=lan"; "OUs" = @("1-Computers","2-Computers","3-Computers") },
    @{ "SearchBase" = "DC=intra,DC=lan";          "OUs" = @("1-ServiceAccounts","2-ServiceAccounts","3-ServiceAccounts") }
)

foreach ($item in $ouList)
{
    foreach ($ou in $item.OUs)
    {
        $searchBase = "OU=" + $ou + "," + $item.SearchBase
    }
}

答案 1 :(得分:0)

执行此操作的一种方法是将数组追加到表达式中(使用+)。这将有效地创建一个集合,然后您可以使用-in运算符查找匹配项。

$OU1="1-Users","2-Users","3-Users"
$OU2="1-Computers","2-Computers","3-Computers"
$OU3="1-ServiceAccounts","2-ServiceAccounts","3-ServiceAccounts"

foreach ($ou in $OU1+$OU2+$OU3 ){

    if( $ou -in $OU1+$OU2 ){

       <# if this array is active - do this code #>
       $SearchBase = "OU="+$ou+",OU=SUBOU,DC=intra,DC=lan"

    }

    if ($ou -in $OU3){

       <# if this array is active - do this code #>
       $SearchBase = "OU="+$ou+",DC=intra,DC=lan"

    }

    <# do this code for all #>

}