Добавить пользовательскую строку в $ String | Выбрать | запрос вывода таблицы формата - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь добавить еще одну строку в следующее форматированное меню таблицы:

$Manager = get-aduser (get-aduser $Aduser.SamAccountName -properties * | Select -ExpandProperty Manager) -properties *
$Team = get-aduser $manager.SamAccountName -properties directreports |  Select-Object -ExpandProperty directreports | Get-ADUser -Properties Name,mail | Select-Object Name,mail
$Team | Select @{Name="Teammember";Expression={$global:i++;$global:i}},name,mail -OutVariable menu | format-table -AutoSize

$r = Read-Host "Select which team member to use via number"
$replacement = $menu | where {$_.teammember -eq $r}

, которое приятно создает пронумерованное меню для выбора оператора.

Я хотел бы добавить пользовательская строка, так что в конце таблицы всегда есть возможность выбрать «Пользовательский». Как можно добавить строку в таблицу заранее определенного размера? Любая помощь приветствуется!

1 Ответ

1 голос
/ 28 января 2020

Поскольку ваш код создает $menu как ArrayList, вы можете использовать метод Add(System.Object value) для добавления в коллекцию. Один из вариантов - добавить желаемое строковое значение в общее свойство нового объекта. Здесь 'Custom' можно изменить на любую строку.

[void]$menu.Add([pscustomobject]@{'Teammember' = 'Custom'})

Второй вариант - просто добавить строковое значение в коллекцию. Однако позже это уменьшит гибкость при выборе меню.

[void]$menu.Add("Custom Selection")

Поскольку Add() производит вывод int (индекс, содержащий дополнение), мы используем приведение [void] для подавления.

$menu в конечном итоге представляет собой набор объектов, которые содержат свойства Teammember, Name и mail. Вы можете просто добавить к этому списку другой объект с любым количеством указанных свойств. Вы можете добавить новые свойства к новому объекту, но у вас будут проблемы с отображением в табличном представлении.

В дополнение, используйте только команды Format-* для отображения вывода. Не рекомендуется хранить Format-* выходные данные в переменных, которые, как ожидается, будут иметь будущие изменения свойств или дополнения объектов. Ваш новый код может выглядеть примерно так:

$Manager = Get-ADUser (Get-ADUser $Aduser.SamAccountName -properties Manager | Select -ExpandProperty Manager)
$Team = Get-ADUser $Manager.SamAccountName -Properties DirectReports |
    Select-Object -ExpandProperty DirectReports |
        Get-ADUser -Properties Name,mail | Select-Object Name,mail
$null = $Team | Select-Object @{Name="Teammember";Expression={$global:i++;$global:i}},Name,Mail -OutVariable menu
[void]$menu.Add([pscustomobject]@{'Teammember' = 'Custom'})

# If you want to output Menu as a table
$menu | Format-Table -AutoSize

$r = Read-Host "Select which team member to use via number"
$replacement = $menu | where {$_.teammember -eq $r}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...