Небольшая статья на тему скрытия и сохранения данных внутри конвейеров (pipeline)
Рассмотрим несколько вариантов, каждый из которых подходит под свои задачи.
Допустим нам нужно скрыть часть свойств в выводе окна Out-GridView
, однако при этом нужно передать «скрытые» свойства дальше по конвейеру.
Реализация следующая:
Get-ChildItem ".\FileStore" | Select-Object Name, PSPath | Add-Member -MemberType MemberSet ` -Name PSStandardMembers ` -Value ([System.Management.Automation.PSPropertySet]::new( 'DefaultDisplayPropertySet', [string[]]('Name') )) ` -PassThru | Out-GridView -PassThru -Title "Quick Notes" | Get-Content | Set-Clipboard
Передаём свойства Name
и PSPath
Выводим в Out-GridView
только свойство Name
На выходе снова можем работать со свойствами Name
и PSPath
выбранных (шаг 2) элементов
Параметр PipelineVariable
позволяет сохранить в переменную «оригинальное значение» и передаст его дальше по конвейеру неизменным. Смотрим пример ниже:
Get-ADUser <username> -PipelineVariable user -Properties memberof | Select-Object -ExpandProperty memberof | Select-Object @{ n = 'Name'; e = { $user.Name }}, @{ n = 'MemberOf' ; e = { $PSItem -replace 'CN=|,(OU|CN)=.+' }}
Получаем данные о пользователе, дополнительно сохраняя их в переменной user
«Разворачиваем» список его групп («теряя» остальные данные)
Можем вернуться к переменной user
которая содержит данные из 1 шага (потерянные, а точнее скрытые на 2)