2

В PowerShell вы можете изменить имя переменной, используемой в качестве элемента в итеративном блоке, например:

dir -recurse *.snippet -OutVariable snippets

$snippets | Where-Object -PipelineVariable fn { $fn.Length -ge 6000 } | select FullName

Этот код не работает, но вы поняли идею. Я думаю, что это не работает, потому что аргумент -PipelineVariable должен быть указан в предыдущем CmdLet.

У меня вопрос, какой CmdLet я использую для передачи содержимого $snippets?

то есть, когда я просто запускаю $snippets он неявно выбрасывает содержимое в конвейер, но что делает CmdLet?

Я пробовал многие, и многие, кажется, выводят массив на экран, но когда он передан в Where-Object предложение where не работает, это похоже на просмотр экземпляра объекта внешнего массива, а не каждого элемента.

Люк

1 ответ1

2

Я бы сказал, что имеет смысл использовать -PipelineVariable если у вас есть более одного шага в конвейере, чтобы сохранить объект от более ранних элементов конвейера.

В любом случае: в этом случае я бы использовал Write-Output:

Write-Output $snippets -PipelineVariable fn | Where-Object { $fn.Length -ge 6000 }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .