Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量中的PowerShell变量_Powershell_Azure - Fatal编程技术网

变量中的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]
}