我目前有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 #>
}
希望您能理解我的意思,并且可以帮助我解决我的问题。谢谢。
答案 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 #>
}