变量中的PowerShell变量

时间:2018-02-06 02:23:42

标签: powershell azure

我正在尝试添加变量$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或为空,然后再次尝试该命令。

3 个答案:

答案 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] } 可以访问单个元素......依此类推。