在foreach循环的第二次迭代中引用函数中的第二个参数

问题描述 投票:0回答:1

这里有两个参数,它将一个IP地址作为输入($ ip和$ ip2)

function createnic () {
    param(
        [string]$vpg = $(throw "vPG name required."),
        [string]$ip = $(throw "IP Address required."),
        [string]$ip2 = $(throw "2nd IP Address required."),
        [string]$prefixlength = $(throw "Prefix Length required.")
    )

    $myvdpg = Get-VDPortgroup -Name $vpg

    foreach ($vm in $vms) {

        New-NetworkAdapter -VM $vm -Portgroup $myvdpg -StartConnected -Type Vmxnet3 -Confirm:$false

        foreach ($srv in $list) {

            $ipdata = Invoke-Command -ComputerName $srv -ScriptBlock { Get-NetIPConfiguration | where { ($_.InterfaceDescription -like "vmxnet3*" -and $_.IPv4Address.IPaddress -like "169.*") } }

            $ipdata = $ipdata.InterfaceIndex

            Invoke-Command - ComputerName $srv -ScriptBlock { New-NetIPAddress -InterfaceIndex $using:ipdata -IPAddress $using:ip -PrefixLength $using:prefixlength }
        }
    }
}

我希望foreach循环在第二次迭代中引用$ ip2,在第一次迭代中引用$ ip。

powershell foreach parameters iteration ip-address
1个回答
1
投票

如果您总是有2个项目$vms,请改用常规的for循环:

$ips = $ip,$ip2
for($i = 0; $i -lt 2; $i++)
{
  $vm = $vms[$i]
  $ipAddress = $ips[$i]

  foreach ($srv in $list) {
    # ... pass $using:ipAddress to Invoke-Command in here
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.