我正在尝试从变量中获取一些数据:
Select-String -inputObject $patternstring -Pattern $regex -AllMatches
| % { $_.Matches } | % { $_.Value } -OutVariable outputValue
Write-Host $outputValue
对于相同的变量,我正在尝试进行字符串操作
$outputValue.Substring(1,$outputValue.Length-2);
此操作失败,指出 outputValue 是ArrayList
。
如何将Arraylist
转换为String
?
答案 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) }