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