Arrays Powershell中的阵列和For循环

Arrays Powershell中的阵列和For循环,arrays,powershell,for-loop,Arrays,Powershell,For Loop,我有两个变量如下 $IP=@("IP1","IP2","IP3") $Hostname=@("Host1","Host2","Host3") 我正在做一个有Combobox的项目,如果用户选择了第一个选项,那么有一些命令应该将变量作为第一个IP和第一个主机名,当用户选择“ALL-DC”选项时,该命令应该逐个在每个IP和主机名上运行 我正在使用下面的代码 if ($Unity_

我有两个变量如下

$IP=@("IP1","IP2","IP3")
$Hostname=@("Host1","Host2","Host3")
我正在做一个有Combobox的项目,如果用户选择了第一个选项,那么有一些命令应该将变量作为第一个IP和第一个主机名,当用户选择“ALL-DC”选项时,该命令应该逐个在每个IP和主机名上运行

我正在使用下面的代码

if ($Unity_ComboBox.text -match 'unit-02') {
$Unity=$IP[0]
$show=$hostname[0]
} elseif ($Unity_ComboBox.text -match 'zone-03'){
$Unity=$IP[1]
$show=$hostname[1]
} elseif ($Unity_ComboBox.text -match 'site-04'){
$Unity=$IP[2]
$show=$hostname[2]
} elseif ($Unity_ComboBox.text -match 'ALL DC'){
 $Unity=$IP
 $show=$hostname
}

foreach ($u in $Unity){

echo $u
echo $show

}
就个人而言,它运行良好,但在所有DC的情况下,它会弄乱$show。
有人能给我一些更好的方法来实现这一点吗?

使用更好的正则表达式的一行程序:

if($Unity_ComboBox.text-match".*DC-0([2-4]).*"){$Unity=$IP[$matches[1]-2];$show=$Hostname[$matches[1]-2]}elseif($Unity_ComboBox.text-match"ALL DC"){$Unity=$IP;$show=$Hostname}
  • 这里的第一个正则表达式是
    *DC-0([2-4])。
    捕获最后一个计算机索引。如果您的表单仅采用名称,则将其更改为
    ^DC-0([2-4])$
  • 然后使用匹配指定两个变量
  • 如果没有,请执行其他操作

您确实需要生成一个示例表单来显示您正在做什么,因为在发布时,这并不清楚。我只列出了三个问题,但实际上有多个不同名称的文本。我正在寻找一些类似于foreach($unity中的u)和($show中的k)的东西,然后您可以将regex最后部分
[2-4]
修改为
[start-stop]
我用不同的文本编辑了我的问题。我主要需要的是for循环的变化,这样我们就可以得到主机名和Ip的各个值,当所有DC都被选中时,然后在循环中一个接一个地得到Ip和主机名的所有值。然后使用regex
^.*-0([2-4])$
@wasif Bro这有助于我减少if-else代码,但我的主要目的还没有解决。我希望当一个人选择所有DC时,我可以在for循环中使用它来执行我的命令,该命令需要单独的IP值和主机名。如示例write host“这是我的$show,这是我的主机名$u”