变量中的PowerShell变量
我试图添加一个变量变量中的PowerShell变量,powershell,azure,Powershell,Azure,我试图添加一个变量$numberOfNics,该变量根据数字添加NIC。现在这是我的代码,我对如何将其放入循环有点困惑。我知道数组可能是一种方法,但不太确定如何在这种意义上创建一个只调用变量而不是设置变量的数组 旧代码: 为了整理这个,我想做一个类似这样的循环 for ($i = 0; $i -lt $numberOfNics; $i++) { $networkInterface$i = New-AzureRmNetworkInterface -Name $networkname$i }
$numberOfNics
,该变量根据数字添加NIC。现在这是我的代码,我对如何将其放入循环有点困惑。我知道数组可能是一种方法,但不太确定如何在这种意义上创建一个只调用变量而不是设置变量的数组
旧代码:
为了整理这个,我想做一个类似这样的循环
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或空,然后重试该命令。您应该能够执行以下操作:
$numberOfNics= 10
$networkname = "ondemandport"
$networkInterface = @()
for ($i = 0; $i -le $numberOfNics; $i++)
{
$networkInterface += ,@( New-AzureRmNetworkInterface -Name ($networkname + $i ))
}
不确定它是否适用于新的AzureRmNetworkInterface,但适用于其他新命令您也可以使用一行:
$networkInterfaces = 1 .. $numberOfNics | ForEach-Object { New-AzureRmNetworkInterface -Name "ondemandport$_" }
现在您可以通过索引访问接口,例如:
$networkInterfaces[2]
顺便说一下,考虑使用ARM模板代替.< /P>
编辑:
$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
}
您可以使用PowerShell
Get Variable
cmdlet。我想指出的一点是,您使用的for循环
将不受限制,直到$numberOfNics
,但事实上,它的长度将取决于$networkname
变量。例如,您拥有从$networkname1
到$networkname9
的networkname
变量,因此您的循环如下所示-
$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
您可以为循环设置另一个,如下所示-
$NetworkInterface = @()
for ($i = 0; $i -lt $NetworkInfo.Length; $i++)
{
$NetworkInterface += New-AzureRmNetworkInterface -Name $NetworkInfo.Value[$i]
}
然后,$NetworkInterface[0]、$NetworkInterface[1]
可以访问各个元素。。。等等。谢谢Martin,一行程序运行得很好,我已经将它添加到代码中,但是,现在调用变量时出现了错误。我编辑了我的原始帖子,以显示我得到的错误。@doggydogworld第一个界面的索引为0,也许你在这里超出了范围?但是,您可以尝试使用Get-AzureRemNetworkInterface
cmdlet检索nic,请参阅我编辑的答案。
$NetworkInterface = @()
for ($i = 0; $i -lt $NetworkInfo.Length; $i++)
{
$NetworkInterface += New-AzureRmNetworkInterface -Name $NetworkInfo.Value[$i]
}