Получение оригинального объекта после обвязки через Out-GridView - PullRequest
2 голосов
/ 09 марта 2020

Мне нужно показать список имен файлов без путей и открыть выбранный файл.

Я могу заставить его работать с полными путями:

Get-ChildItem *.txt -Recurse | Sort-Object Name| Out-GridView -PassThru | Invoke-Item

Но когда я пытаюсь показать только имена файлов, происходит сбой:

Get-ChildItem *.txt -Recurse | Sort-Object Name| Select-Object Name | Out-GridView -PassThru | Invoke-Item

Пропуская его через Get-Member, я понимаю, что Select-Object Name чередует все неименные свойства. Итак, как я могу отследить исходный файловый объект от того, что я получил из GridView?

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Возможно, вы захотите использовать свойство DefaultDisplayPropertySet скрытого PSStandardMembers, установленного для этого:

$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]@('Name'))
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet)

Get-ChildItem *.txt -Recurse | Select-Object * |
ForEach-Object {
    $_ | Add-Member MemberSet PSStandardMembers $PSStandardMembers; $_
} | Out-Gridview -PassThru | Select-Object FullName
  • Get-ChildItem *.txt имеет набор свойств отображения по умолчанию: LastWriteTime, Length, Name
  • Select-Object * убирает полный набор свойств (отображает все свойства)
  • Add-Member MemberSet PSStandardMembers $PSStandardMembers добавляет новый display устанавливается только со свойством Name и сохраняет остальные свойства скрытыми
  • Select-Object FullName раскрывает скрытое свойство FullName
0 голосов
/ 09 марта 2020

Проблема в том, что Invoke-Item нужен путь, а не только имя файла. Вы можете сохранить get-childitem во временной переменной:

$tmp = Get-ChildItem *.txt -Recurse | Sort-Object Name
$tmp | Select-Object Name | Out-GridView -PassThru
$tmp | Invoke-Item

Это то, что вы хотели? Пожалуйста, дайте мне знать, если это сработало, и если это сработало, отметьте мой пост как ответ. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...