[英]ArrayLists and Advanced Functions
我有一个字符串ArrayLists的ArrayList,需要使用高级函数进行处理。 我正在根据“在一个月的午餐中学习Powershell工具制作”中学到的知识对该功能进行建模。
为了使功能灵活,他们在那本书中告诉您进行设置,以便可以通过管道传递参数,但也可以将其视为数组。 因此,基本上,您使高级函数接受特定参数的ValuesFromPipeline
,但随后还使该参数键入数组,并在Process中添加一个ForEach-Object
。
我遇到的问题是,如果我以这种方式配置函数,它将无法再通过管道传递值。因为这样一来,它将一次对待它们,并且ForEach-Object
将ArrayList分解为后续字符串进行处理。 有防止这种情况的简便方法吗?
请参见下面的代码示例。 当我将$OutsideArray
作为常规参数( Get-Data $OutsideArray
)传递给Get-Data
,它可以工作。 当我在函数中删除ForEach-Object
时,它起作用了。 但是当我按原样管道$OutsideArray
时,它不再起作用。
尝试逐步查看是否可以理解为什么这样做,但到目前为止还没有运气。
function Get-Data {
[CmdletBinding()]
param (
[Parameter(Mandatory = $True, ValueFromPipeline = $True)]
[System.Collections.ArrayList]$ModuleBlocks
)
PROCESS {
$ModuleBlocks | % {
$test = $_
}
}
}
$OutsideArray = New-Object System.Collections.ArrayList
For ($i = 0; $i -lt 10; $i++) {
$InsideArray = New-Object System.Collections.ArrayList
For ($j = 0; $j -le 10; $j++) {
$InsideArray.Add("$i This is a test $j") | Out-Null
}
$OutsideArray.Add($InsideArray) | Out-Null
}
$OutsideArray | Get-Data
ValueFromPipelineByPropertyName怎么样? 您可以通过管道将arraylist作为另一个对象的属性。 我在这里发布了类似的答案(未评分): 将数组列表从第一个脚本添加到第二个脚本
编辑:我想到了第二种方式。 使用逗号运算符将其传递:
$a = [collections.arraylist](1,2,3)
,$a | foreach gettype
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True ArrayList System.Object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.