2

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

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

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

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

这失败了,说明outputValue是一个ArrayList.

如何转换ArraylistString

4

3 回答 3

7

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

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

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

上面我用新行分隔 ArrayList 中的每个字符串,因为这通常是 -OutVariable 在将字符串转换为 ArrayList 时拆分字符串的字符串,但如果需要,您可以使用不同的分隔符/字符串。

于 2014-05-07T06:18:08.203 回答
1

试试这样:

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

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

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

于 2012-10-16T08:03:08.710 回答
1

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

更新:

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

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

$outputValue | Foreach-Object { $_.Substring(1,$_.Length-2) }
于 2012-10-16T08:58:50.697 回答