我正在尝试添加变量$numberOfNics
,根据数字添加nics。现在这是我的代码,我对如何将它放入循环感到困惑。我知道一个数组可能是要走的路,但不太确定如何在这个意义上创建一个只调用变量而不是设置它们的数组。
$numberOfNics=1
$networkname1 = "ondemandport1"
$networkname2 = "ondemandport2"
$networkname3 = "ondemandport3"
$networkname4 = "ondemandport4"
$networkname5 = "ondemandport5"
$networkname6 = "ondemandport6"
$networkname7 = "ondemandport7"
$networkname8 = "ondemandport8"
$networkname9 = "ondemandport9"
$networkInterface1 = New-AzureRmNetworkInterface -Name $networkname1
$networkInterface2 = New-AzureRmNetworkInterface -Name $networkname2
$networkInterface3 = New-AzureRmNetworkInterface -Name $networkname3
$networkInterface4 = New-AzureRmNetworkInterface -Name $networkname4
$networkInterface5 = New-AzureRmNetworkInterface -Name $networkname5
为了整理这个,我想做一个像这样的循环
for ($i = 0; $i -lt $numberOfNics; $i++)
{
$networkInterface$i = New-AzureRmNetworkInterface -Name $networkname$i
}
编辑: 感谢Martin,但现在我无法调用变量。
$networkInterfaces = 1 .. $numberOfNics | ForEach-Object {
if ($a -eq 0){
New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name "ondemandport$_" -Location $locationName -SubnetId $virtualNetwork.Subnets[$a].Id -PublicIpAddressId $publicIp.Id -force
}
ElseIf ($a=1){
New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name "ondemandport$_" -Location $locationName -SubnetId $virtualNetwork.Subnets[$a].Id -force
}
Else{
New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name "ondemandport$_" -Location $locationName -SubnetId $virtualNetwork.Subnets[2].Id -force
}
}
#
也希望将其变成数组循环
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[1].Id -Primary
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[2].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[3].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[4].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[5].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[6].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[7].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[8].Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterfaces[9].Id
错误消息:Add-AzureRmVMNetworkInterface:无法验证参数“Id”的参数。参数为null或空。提供一个论点 不为null或为空,然后再次尝试该命令。
答案 0 :(得分:3)
您也可以使用一行:
$networkInterfaces = 1 .. $numberOfNics | ForEach-Object { New-AzureRmNetworkInterface -Name "ondemandport$_" }
现在您可以通过索引访问接口,例如:
$networkInterfaces[2]
顺便说一句,请考虑使用ARM模板。
修改强>
$networkInterfaces = 1 .. $numberOfNics | ForEach-Object {
$isPrimary = $_ -eq 0 # set the first one as primary
$nic = Get-AzureRmNetworkInterface -Name "ondemandport$_" -ResourceGroupName $resourceGroupName
Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id -Primary:$isPrimary
}
答案 1 :(得分:0)
你应该可以这样做:
$numberOfNics= 10
$networkname = "ondemandport"
$networkInterface = @()
for ($i = 0; $i -le $numberOfNics; $i++)
{
$networkInterface += ,@( New-AzureRmNetworkInterface -Name ($networkname + $i ))
}
不确定它是否可以与New-AzureRmNetworkInterface一起使用,但是可以与其他新命令配合使用
答案 2 :(得分:0)
您可以使用PowerShell Get-Variable
cmdlet。我想指出的一件事是你使用的for loop
在$numberOfNics
之前不会受到限制,但事实上,它的长度将取决于$networkname
变量。例如,您拥有networkname
到$networkname1
的{{1}}变量,因此您的循环看起来像这样 -
$networkname9
现在$NetworkInfo = @()
for($i = 1; $i -le 9; $i++) {$NetworkInfo += Get-Variable("networkname" + $i)}
已
$NetworkInfo
你可以把另一个Name Value
---- -----
networkname1 ondemandport1
networkname2 ondemandport2
networkname3 ondemandport3
networkname4 ondemandport4
networkname5 ondemandport5
networkname6 ondemandport6
networkname7 ondemandport7
networkname8 ondemandport8
networkname9 ondemandport9
循环这样的东西 -
for
然后$NetworkInterface = @()
for ($i = 0; $i -lt $NetworkInfo.Length; $i++)
{
$NetworkInterface += New-AzureRmNetworkInterface -Name $NetworkInfo.Value[$i]
}
可以访问单个元素......依此类推。