PowerShell. Скрытие и сохранение данных в конвейерах
Небольшая статья на тему скрытия и сохранения данных внутри конвейеров (pipeline)
Рассмотрим несколько вариантов, каждый из которых подходит под свои задачи.
Свойство DefaultDisplayPropertySet
Допустим нам нужно скрыть часть свойств в выводе окна 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
- Шаг 1
Передаём свойства
Name
иPSPath
- Шаг 2
Выводим в
Out-GridView
только свойствоName
- Шаг 3
На выходе снова можем работать со свойствами
Name
иPSPath
выбранных (шаг 2) элементов
Параметр PipelineVariable
Параметр 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)=.+' }}
- Шаг 1
Получаем данные о пользователе, дополнительно сохраняя их в переменной
user
- Шаг 2
«Разворачиваем» список его групп («теряя» остальные данные)
- Шаг 3
Можем вернуться к переменной
user
которая содержит данные из 1 шага (потерянные, а точнее скрытые на 2)