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])$
- 然后使用匹配指定两个变量
- 如果没有,请执行其他操作
[2-4]
修改为[start-stop]
我用不同的文本编辑了我的问题。我主要需要的是for循环的变化,这样我们就可以得到主机名和Ip的各个值,当所有DC都被选中时,然后在循环中一个接一个地得到Ip和主机名的所有值。然后使用regex^.*-0([2-4])$
@wasif Bro这有助于我减少if-else代码,但我的主要目的还没有解决。我希望当一个人选择所有DC时,我可以在for循环中使用它来执行我的命令,该命令需要单独的IP值和主机名。如示例write host“这是我的$show,这是我的主机名$u”