Powershell:多维数组从 "system.object[]" 更改 return 值

Powershell: multidimensional array changes return value from "system.object[]"

我想知道是否有人可以阐明我在通过函数从多维数组返回值时遇到的问题:

$ArrayList = @()

function MultiDimensionalArrayTest
{
    param(
        [array]$ArrayList
    )
    for($i = 0; $i -lt 1; $i++)
    {
                $ArrayModify += ,@("Test", "Test")
    }

    return $ArrayModify

}

$ArrayModify = MultiDimensionalArrayTest

foreach ($item in $ArrayModify)
{
    Write-Host $item[0]
}

当循环执行一次返回值是:

T
T

然而,如果 for 语句被循环两次,返回的值是:

Test
Test

我的目标是从 Write-Host $item[0] 中检索 x 个值 "Test" 而不管语句执行了多少次

看起来,如果在 $ArrayModify 数组中捕获并返回两行或更多行,则值为 system.object[],但如果循环一次,则捕获值 "Test, Test" 并且当 Write-Host $item[0] 被执行时,它会打印 T.

如有任何建议,我们将不胜感激。

首先我注意到你的代码中有几个错误。

这一行 $ArrayList = @() 没有用,因为您之后没有使用 $ArrayList 变量。

关于 MultiDimensionalArrayTest 函数,您声明了一个 $ArrayList 参数,但您从未在函数中使用它。

最后当这一行没有意义时 $ArrayModify = MultiDimensionalArrayTest = $item,你可能是指 $ArrayModify = MultiDimensionalArrayTest

这不是您问题的完整答案,因为我不确定您要实现的目标,但请看一下这一行:

$ArrayModify = MultiDimensionalArrayTest = $item

这没有意义,因为您正在调用函数 MultiDimensionalArrayTest 并向其传递两个参数,即“=”(powershell 假定这是一个字符串)和 $item(空对象)。然后将返回的任何内容分配给 $ArrayModify.

之所以输出"T",是因为你输出的是当前字符串的第一个元素。 "Test"当$item为字符串数组时输出

这不是处理它的最干净的方法,但您需要防止 PowerShell 将单个元素数组展开为具有两个元素的数组。

function MultiDimensionalArrayTest{
    $ArrayModify = @()

    for($i = 0; $i -lt 1; $i++){
        $ArrayModify += ,@("Test$i", "Test$i$i")
    }

    ,@($ArrayModify)

}

我相信使用上述函数将获得所需的输出。 ,@($ArrayModify) 确保数组是 returned 而不是像上面看到的那样展开到它的元素中。

$ArrayList = @()
$ArrayList = MultiDimensionalArrayTest

foreach ($item in $ArrayList){$item[0]}

在循环中给出 $i -lt 1 的输出

Test0

在循环

中给出$i -lt 2的输出
Test0
Test1

你的输出

关于使用 $i -lt 1 的示例的输出,PowerShell 正在将数组展开为具有 2 个元素 "Test" 和 "Test" 的一维数组。您看到的是字母 "T",因为所有字符串都支持数组索引,并且 return 字符来自请求的位置。

其他代码问题

不要打死马,但要真正查看其他答案和评论,因为它们提供了一些关于您在问题中提供的代码的编码错误和异常的提示。