22

我还没有太多 PowerShell 经验,并且正在尝试自学。

我正在尝试为一个更大的项目制作一些概念验证代码。这里的主要目标是使用函数过于动态地创建元素并将元素添加到数组中。

这是我的代码:

$testArray = @()
function addToArray($Item1)
{
    $testArray += $Item1
    "###"
}

$tempArray = "123", "321", "453"
$foldertest = "testFolder"

foreach($item in $tempArray)
{
    addToArray $item
}
"###"

每次函数完成时,数组都会变为空。请记住,我的大部分编程经验都来自 Java、PHP、一些 C 和 C++,仅举几例,如果我在 PHP 中执行此操作(当然要调整语言语法),这会很好。

4

4 回答 4

33
$testArray = [System.Collections.ArrayList]@()
$tempArray = "123", "321", "453"

foreach($item in $tempArray)
{
    $arrayID = $testArray.Add($item)
}
于 2016-10-03T04:54:41.497 回答
15

问题是范围之一;在您的 addToArray 函数内将行更改为:

$script:testArray += $Item1

...存储到您期望的数组变量中。

于 2012-11-10T06:43:23.100 回答
3

如果您要使用动态数量的项目,更精确的解决方案可能是使用列表:

$testArray = New-Object System.Collections.Generic.List[System.Object]

$tempArray = "123", "321", "453"

foreach($item in $tempArray)
{
    $testArray.Add($item)
}

注意:在这种情况下,您可以从.Net获得 List 的强大功能,因此您可以轻松地应用 linq、合并、拆分以及执行您在 .Net 中对 List 执行的任何操作

于 2019-10-11T16:51:19.953 回答
0

而不是在每次循环迭代中重新创建数组(这基本上是每次添加时都会发生的事情),而是将循环的结果分配给一个变量:

$testArray = foreach($item in $tempArray)
{
    addToArray $item
}
于 2012-11-10T17:32:47.590 回答