在Arlesylist中将Arraylist转换为字符串

时间:2012-10-16 07:54:57

标签: powershell

我正在尝试从变量中获取一些数据:

 Select-String -inputObject $patternstring  -Pattern $regex -AllMatches
 | % { $_.Matches } | % { $_.Value } -OutVariable outputValue
 Write-Host $outputValue

对于相同的变量,我正在尝试进行字符串操作

$outputValue.Substring(1,$outputValue.Length-2);

此操作失败,指出 outputValue ArrayList

如何将Arraylist转换为String

3 个答案:

答案 0 :(得分:5)

正如sean_m的评论中所提到的,最简单的方法是首先使用-join运算符将字符串的System.Collections.ArrayList转换为单个字符串:

$outputValue = $($outputValue -join [Environment]::NewLine)

完成此操作后,您可以对$ outputValue执行任何常规字符串操作,例如Substring()方法。

上面我将ArrayList中的每个字符串与一个新行分开,因为它通常是-OutVariable在将其转换为ArrayList时将字符串拆分为的字符串,但是您可以使用不同的分隔符字符串/字符串如果你愿意的话。

答案 1 :(得分:1)

试试这样:

$outputvalue = Select-String -inputObject $patternstring  -Pattern $regex -AllMatches | 
               % { $_.Matches } | % { $_.Value }

$outputValue | % { $_.Substring(1 ,$_.Length - 2)}

-outvariable中的参数ForEach-Object似乎没有捕获处理的sciptblock的输出(这在Powershell V2中;感谢@ShayLevi测试它在V3中工作)。

答案 2 :(得分:1)

如果输出是值的集合,那么无论结果的类型是什么,子字符串都应该失败。尝试管道到Foreach-Object,然后使用子字符串。

更新:

OutputVariable仅适用于v3,请参阅@Christian解决方案v2。

Select-String -InputObject $patternstring  -Pattern $regex -AllMatches  | % { $_.Matches } | % { $_.Value } -OutVariable outputValue

$outputValue | Foreach-Object { $_.Substring(1,$_.Length-2) }