2017-06-03 59 views
0

我想通過管道來記錄一條記錄。我的表情看起來像:是否可以增加Powershell管道變量?

$x=28 
gci | select-object basename,fullname,@{name='x'; Expression={($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 

我試過的附加成員,而不是@表達的上方,做同樣的事情 - X不會改變每個對象的價值。

我的最終目標是生成一個csv文件,這樣我就可以使用寫主機遍歷gci輸出,如果無法讓我的變量改變值,就像gci發出記錄一樣。

我的問題是我錯過了正確的語法來增加選擇對象或添加成員中的變量還是隻是不可能做到這一點?

+1

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

+0

@PetSerAl謝謝!雖然我不清楚發生了什麼事情。當我想要子例程中的操作影響子例程的全局變量時,我想到了「通過ref」調用。在這種情況下,我沒有看到「子程序」邊界在哪裏。 – Michael

+0

'Select-Object'在不同的作用域中調用'Expression'。 – PetSerAl

回答

1

溶液2(隨着全球VAR):

$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可以發現變量):

$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}} 
相關問題