2017-06-03 20 views
0

パイプを通過するレコードを数えようとしています。私は何を得ることはありPowershellパイプ変数をインクリメントすることはできますか?

$x=28 
gci | select-object basename,fullname,@{name='x'; Expression={($x--)}} 

: - xは変更されません

BaseName FullName    x 
-------- --------    - 
aaoeu C:\Users\m\x\aaoeu.txt 28 
aue  C:\Users\m\x\aue.txt 28 
xx  C:\Users\m\x\xx.txt 28 

私は上記のように代わりに@発現のアドオンメンバーを試してみたし、それは同じことをした私の表現は次のようになりますオブジェクトあたりの値。

私の最終目標はcsvファイルを生成することです.GCiがレコードを送信するときに値を変更する変数を取得できない場合は、write-hostを使用してgci出力を反復することができます。

私の質問は、select-objectまたはadd-memberの変数をインクリメントする正しい構文がないか、それを行うことができませんか?

+1

'Expression = {(([ref] $ x).Value--)} – PetSerAl

+0

@PetSerAlありがとう!それは何が起こっているか私には明らかではないが、うまくいった。私はサブルーチンの操作がサブルーチン全体の変数に影響を与えるようにしたいときに "ref参照"を呼び出すと思います。この例では、 "サブルーチン"の境界線がどこにあるのか分かりません。 – Michael

+0

'Select-Object'は別のスコープで' Expression'を呼び出します。 – PetSerAl

答えて

1

解決策2:

$global:x=28 
Get-ChildItem | select-object basename,fullname,@{name='x'; Expression={($global:x--)}} 

ショートバージョン:

$global:x=28 
gci | select basename,fullname,@{N='x'; E={($global:x--)}} 
0

溶液1(変数を発見することができますforeach):(グローバルVAR付き)

$x=28 
gci | %{ $x++; [pscustomobject]@{BaseName=$_.BaseName; FullName=$_.FullName; x=$x}} 
0

溶液3(宣言にループ):

gci | foreach -Begin {$x=28 } -process { $x++; [pscustomobject]@{BaseName=$_.BaseName; FullName=$_.FullName; x=$x}} 
関連する問題