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
如何将字符串连接到powershell中嵌套数组内的值?_Powershell_Powershell 2.0_Powershell 3.0_Powershell 4.0_Powercli - Fatal编程技术网

如何将字符串连接到powershell中嵌套数组内的值?

如何将字符串连接到powershell中嵌套数组内的值?,powershell,powershell-2.0,powershell-3.0,powershell-4.0,powercli,Powershell,Powershell 2.0,Powershell 3.0,Powershell 4.0,Powercli,我有一个嵌套数组@'1'、'3'、@'5'、'7'、'9'、@'2'、'4'、'6' 以下是上述模块的输出: Object type: Array Member count: 2 Values: 1 3 Object type: Array Member count: 3 Values: 2 4 6 Object type: Array Member count: 3 Values: 5 7 9 我试图使用下面的代码将端口组连接到嵌套数组中的值 $port = "Port

我有一个嵌套数组@'1'、'3'、@'5'、'7'、'9'、@'2'、'4'、'6'

以下是上述模块的输出:

Object type: Array
Member count: 2
Values: 1 3
Object type: Array
Member count: 3
Values: 2 4 6
Object type: Array
Member count: 3
Values: 5 7 9
    
我试图使用下面的代码将端口组连接到嵌套数组中的值

$port = "Port Group-"
$portarr = $podNarr | ForEach-Object {
      $port + $_
    }
Write-Output `n
$portarr | ForEach-Object {
    Write-Host Values: $_
}
上述代码生成的输出为:

Values: Port Group-1 3
Values: Port Group-2 4 6
Values: Port Group-5 7 9
我希望输出为,@'Port Group-1'、'Port Group-3'、@'Port Group-5'、'Port Group-7'、'Port Group-9'、@'Port Group-2'、'Port Group-4'、'Port Group-6'


如何实现我的目标?

你需要两个循环。一个循环通过外部数组,后者循环通过嵌套数组。foreach不行,因为迭代和更改数组是互斥的操作

$arr = @(@('1','3'), @('5','7','9'), @('2','4','6'))

# Here we traverse through the outer elements
for($a = 0; $a -lt $arr.length; ++$a) {

    # Process each nested array and update its value    
    for($b = 0; $b -lt $arr[$a].length; ++$b) {
        $arr[$a][$b] =  $("Port group-{0} "-f $arr[$a][$b])
    }
}

# Output
$arr | ForEach-Object {
    Write-Host Object type: $_.gettype().BaseType.name
    Write-Host Member count: $_.count
    Write-Host Values: $_
}

Object type: Array
Member count: 2
Values: Port group-1  Port group-3
Object type: Array
Member count: 3
Values: Port group-5  Port group-7  Port group-9
Object type: Array
Member count: 3
Values: Port group-2  Port group-4  Port group-6
我有这样的建议

@(@('1','3'), @('5','7','9'), @('2','4','6')) | foreach{
"Values: " + ($_|foreach{"Port Group-$_"})  
}
输出:

如果不强制输出成为阵列,Powershell将展开阵列。 可以通过在数组前面加一元逗号强制执行此操作,该逗号将数组包装在另一个1元素数组中。当该零件展开时,原始阵列将保留

差不多

$a = @(@('1','3'), @('5','7','9'), @('2','4','6'))
$b = $a | ForEach-Object {
    $c = foreach ($port in $_) { 'Port Group-{0}' -f $port }
    # output this array as ARRAY by wrapping it in a 1-element new array using the unary comma
    ,$c
}


Write-Host $b[0]
Write-Host $b[1]
Write-Host $b[2]
输出

Port Group-1 Port Group-3
Port Group-5 Port Group-7 Port Group-9
Port Group-2 Port Group-4 Port Group-6
@djangunched-f替换模板字符串中的编号占位符以格式化新字符串。占位符的形式为{0}、{1}等。在本例中,它填充模板字符串“Port Group-{0}”中{0}所在的$portvalue。你可以用这个做更多的事情,在这个评论的链接上有一个乐。
$a = @(@('1','3'), @('5','7','9'), @('2','4','6'))
$b = $a | ForEach-Object {
    $c = foreach ($port in $_) { 'Port Group-{0}' -f $port }
    # output this array as ARRAY by wrapping it in a 1-element new array using the unary comma
    ,$c
}


Write-Host $b[0]
Write-Host $b[1]
Write-Host $b[2]
Port Group-1 Port Group-3
Port Group-5 Port Group-7 Port Group-9
Port Group-2 Port Group-4 Port Group-6