如何在 PowerShell 中将数组传递给函数

在许多编程语言中,包括 PowerShell,数组是一种基本的数据结构。它们允许您高效地存储值的集合,使其成为 PowerShell 脚本中各种任务的重要工具。
本文将关注数组及其在 PowerShell 中传递给函数的约定。
PowerShell 数组
PowerShell 数组与通用编程语言中的数组(如 Java、Python、C# 等)没有区别。它们提供了容纳固定大小的值或任何数据类型对象集合的能力。
语法:
$intTypeArray = 34, 100, 1000, 45, 455, 1
要检查以下示例中变量 $intTypeArray
的类型,我们将使用内置的 GetType()
方法。
如预期的那样,基本类型是 System.Array
。由于我们没有明确指定该数组的数据类型,PowerShell 引擎将其创建为对象数组。
有趣的是,PowerShell 数组可以在单个数组中容纳多种类型的元素,如下面的代码片段所示。
代码:
$mixedElementArray = 200, 'stringElement', 12.555, 'hello'
输出:
如您所见,默认的 PowerShell 数组是基于 Object[]
类型。
在 PowerShell 中,每个值或对象都继承自 Object
。因此,任何值或对象都可以分配给默认的 PowerShell 数组。
除了默认数组,PowerShell 还提供了一个称为强类型数组的变体。这些数组专门容纳特定数据类型的集合。
当我们创建强类型数组时,有必要将引用变量转换为特定数组类型,如 int32[]
、string[]
等。
[string[]]$stringTypeArray = 'tesla', 'mecedes', 'audi', 'lambo'
让我们检查 $stringTypeArray
的类型。
$stringTypeArray.GetType()
输出:
将数组传递给 PowerShell 函数
在 PowerShell 中,强类型数组被推荐用于您的 PowerShell 程序,因为它具有类型安全性。每当您需要将已定义的数组传递给函数时,以下语法应能正常工作。
语法:
function <function_identifier>([<data_type>[]]$<parameter_name>)
{
}
在此语法中:
function
:表示用于启动 PowerShell 中函数定义的关键字。<function_name>
:表示函数的名称。[<data_type>[]]
:指定参数的数据类型,允许您在函数内部处理指定数据类型的数组。$<parameter_name>
:作为函数内参数的名称。
通过这种方式,您可以轻松地将数组传递给函数。为了说明这一点,让我们首先定义一个名为 letsPassAnArray
的 PowerShell 函数。
代码:
function letsPassAnArray([string[]]$stringList) {
foreach ($arrEle in $stringList) {
Write-Host $arrEle
}
}
在此示例中,我们定义了一个名为 letsPassAnArray
的 PowerShell 函数,并将参数命名为 $stringList
。然后,我们开始一个 foreach
循环,遍历 $stringList
数组中的每个元素($arrEle
)。
在循环内部,我们将每个数组元素写入控制台。为了测试该函数,我们创建了一个名为 $stringArr
的字符串类型数组,其中包含元素 'Apple'
、'Orange'
和 'Grapes'
。
代码:
[string[]]$stringArr = 'Apple', 'Orange', 'Grapes'
letsPassAnArray($stringArr)
最后,我们调用 letsPassAnArray
函数,并将 $stringArr
数组作为参数传递给它,导致该函数遍历并打印数组的每个元素。
输出:
结论
在 PowerShell 中,理解数组以及如何将它们传递给函数对于高效且有组织的脚本编写至关重要。无论您是使用可以容纳各种数据类型的通用数组,还是用于类型安全的强类型数组,掌握数组操作将使您能够编写更有效的 PowerShell 脚本。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.