2

変数からいくつかのデータをgrepしようとしています:

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

同じアウト変数に対して、文字列操作をしようとしています

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

これは、 outputValueが であることを示して失敗しますArrayList

Arraylistを に変換するにはどうすればよいStringですか?

4

3 に答える 3

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 に答える
1

このようにしてみてください:

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

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

のパラメーター-outvariableは、ForEach-Object処理された sciptblock の出力をキャプチャしていないようです (これは Powershell V2 です。V3 で動作することをテストしてくれた @ShayLevi に感謝します)。

于 2012-10-16T08:03:08.710 に答える