Можно ли увеличить переменную трубы 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

Я попробовал add-member вместо выражения @, как указано выше, и он сделал то же самое - x не изменяет значение для объекта.

Моя конечная цель - создать файл csv, чтобы я мог использовать write-host для итерации выходных данных gci, если невозможно получить мои переменные для изменения значения, поскольку gci генерирует записи.

Мой вопрос: мне не хватает правильного синтаксиса для приращения переменной в select-object или add-member или это просто невозможно сделать?

3 ответа

Решение

Решение 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--)}}

Решение 1 (foreach может найти переменную):

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

Решение 3 (объявление в петлю):

gci | foreach -Begin {$x=28 } -process { $x++; [pscustomobject]@{BaseName=$_.BaseName; FullName=$_.FullName; x=$x}}
Другие вопросы по тегам