Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.03.2024
Сообщений: 35

Как добавить колонку к выводу командлета?

29.03.2024, 17:41. Показов 1135. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть к примеру вот такой код

Code
1
2
3
$array1 = Get-Process
 
$array1
И получаем вывод

Code
1
2
3
4
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    349      24     9636       8680             20232   1 ApplicationFrameHost
    184      14     4036       5624              6212   0 armsvc
А как сюда добавить свою колонку? К примеру

Code
1
2
3
4
Number   Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------   -------  ------    -----      -----     ------     --  -- -----------
 1      349      24     9636       8680             20232   1 ApplicationFrameHost
 2      184      14     4036       5624              6212   0 armsvc
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2024, 17:41
Ответы с готовыми решениями:

Как заполнить колонку А от 1 до 200, колонку В от 2 до 40, колонку С от 3 до 600
Написать макрос, на текстовом листе заполнить колонку А от 1 до 200, колонку В от 2 до 40, колонку С с 3 до 600 Заранее большое спасибо!

Взять каждую колонку из файла csv, сортировать, взять уникальные значения, слева добавить колонку Id, сохранить в файл
Всем привет, решил, вот помаяться с питоном.

Добавить в начало возможность ввода имени, а после завершения теста добавить имя к выводу
Помогите пожалуйста, нужно добавить в начало возможность ввода имени, а после завершения теста добавить имя к выводу <head> ...

12
2802 / 500 / 120
Регистрация: 26.09.2020
Сообщений: 945
Записей в блоге: 5
29.03.2024, 19:15
Цитата Сообщение от superspagetti Посмотреть сообщение
Get-Process…
…А как сюда добавить свою колонку? К примеру
К приимеру, на пример:
PowerShell
1
2
3
4
5
6
7
8
9
$i = 0; Get-Process | ForEach-Object {
    [pscustomobject] @{
        N           = ++$i
        'NPM(K)'    = [long]($_.NPM / 1024)
        Id          = $_.Id
        SI          = $_.SI
        ProcessName = $_.ProcessName
    }
} | Format-Table
где, к примеру, ProcessName — заголовок, имя столбца, $_.ProcessName — строки, значение столбца

подсмотреть про заголовки и значения используемые по умолчанию:
PowerShell
1
2
3
$gps_table_control = Get-FormatData -TypeName 'System.Diagnostics.Process' | Select-Object -exp FormatViewDefinition | Where-Object Name -eq process | Where-Object Control -Match 'Table' | Select-Object -exp Control
$gps_table_control.Headers
$gps_table_control.Rows.Columns
Я сделал только 'NPM(K)' = [long]($_.NPM / 1024) остальное по аналогии.
1
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
29.03.2024, 19:30
PowerShell
1
2
3
$array1 = ps
$array1|%{$i=1}{$_|add-member -NotePropertyName Number -NotePropertyValue $i;$i++}
$array1|select *|ogv
1
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
29.03.2024, 20:21
superspagetti, ну и еще один способ

PowerShell
1
2
3
4
$array1 = Get-Process 
| Select-Object Name, Id,  @{label="Date";expression={Get-Date}} 
| Format-Table
$array1
Добавлено через 7 минут
нет, так в вашем случае не срабоатет.

Добавлено через 5 минут
Вот так получится
PowerShell
1
2
3
4
5
6
7
$i = 0
$array1 = Get-Process 
| ForEach-Object -Process {
    ++$i
    $_ | Select-Object  @{label="Number";expression={$i}}, *
}
$array1
0
 Аватар для volodin661
6684 / 2276 / 347
Регистрация: 10.12.2013
Сообщений: 7,854
30.03.2024, 18:34
Спагетти,
тебе на уши вешают лапшу,
у командлетов Format-* тоже есть возможность показать вычисляемое свойство в дополнение к реальным свойствам.

PowerShell
1
2
$РАЗБОР = @{ Существительное=@("Графиня", "Лицом", "Пруду"); Причастие=@("Изменившимся"); Глагол=@("Бежит"); Предлог=@("с","к") }
$РАЗБОР
output:
Code
1
2
3
4
5
6
Name                           Value
----                           -----
Причастие                      {Изменившимся}
Существительное                {Графиня, Лицом, Пруду}
Предлог                        {с, к}
Глагол                         {Бежит}

PowerShell
1
$COUNTER=-1;  $РАЗБОР | FORMAT-TABLE @{L= "NN"; E= { (++$SCRIPT:COUNTER) } }, Name, Value
Output
Code
1
2
3
4
5
6
NN Name            Value
-- ----            -----
 1 Причастие       {Изменившимся}
 2 Существительное {Графиня, Лицом, Пруду}
 3 Предлог         {с, к}
 4 Глагол          {Бежит}
1
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
31.03.2024, 07:58
volodin661,

PowerShell
1
$COUNTER=0;  $РАЗБОР | FORMAT-TABLE @{L= "NN"; E= { ($SCRIPT:COUNTER++) } }, Name, Value
Дело вкуса конечно...
0
2802 / 500 / 120
Регистрация: 26.09.2020
Сообщений: 945
Записей в блоге: 5
31.03.2024, 13:56
superspagetti, не слушай их!
Они предлагают писать кучу букав в хеш-таблицах, не зря они не стали делать это для: NPM(K), PM(M), WS(M), CPU(s).

Про много букав и даже файл: Easy PowerShell Custom Formatting • The Lonely Administrator, но там без счётчика.
0
0 / 0 / 0
Регистрация: 27.03.2024
Сообщений: 35
01.04.2024, 12:52  [ТС]
Спасибо большое за большое количество предоставленных вариантов, но пока остановился на варианте

Code
1
2
3
4
5
6
7
8
$i = 0; Get-Process | ForEach-Object {
    [pscustomobject] @{
        N           = ++$i
        'NPM(K)'    = [long]($_.NPM / 1024)
        Id          = $_.Id
        SI          = $_.SI
        ProcessName = $_.ProcessName
    }
Но вопрос, как не выводить сами label? Знаю через ft можно так сделать, но есть другие варианты?
0
 Аватар для volodin661
6684 / 2276 / 347
Регистрация: 10.12.2013
Сообщений: 7,854
01.04.2024, 14:24
Цитата Сообщение от superspagetti Посмотреть сообщение
есть другие варианты?
cmdlet ForEach-Object но без создания нелепых об`ектов

1C
1
gps |% {$NN=1}  {'{0} {1} {2}' -f $NN++, $_.NAME, $_.CPU}  {"done!"}

superspagetti, какая целевая задача ?
2
2802 / 500 / 120
Регистрация: 26.09.2020
Сообщений: 945
Записей в блоге: 5
01.04.2024, 16:46
Цитата Сообщение от superspagetti Посмотреть сообщение
Но вопрос, как не выводить сами label?
Типа такого?
PowerShell
1
2
3
4
5
6
7
8
9
$i = 0; Get-Process | ForEach-Object {
    [pscustomobject] @{
        N           = ++$i
        'NPM(K)'    = [long]($_.NPM / 1024)
        Id          = $_.Id
        SI          = $_.SI
        ProcessName = $_.ProcessName
    }
} | Format-Table -HideTableHeaders
Выводить строки у volodin661, хороший вариант, я бы добавил форматирование
PowerShell
1
gps |% {$NN=1}  {'{0,3} {1,-24} {2,8:N2} {3,6}' -f $NN++, $_.NAME, $_.CPU, ([long]($_.NPM / 1024))}  {"done!"}
Цитата Сообщение от superspagetti Посмотреть сообщение
есть другие варианты?
Я не знаю.
Вы огласили бы: какая целевая задача ?

Добавлено через 7 минут
PowerShell
1
gps |% {$NN=1}  {'{0,3} {3,6} {2,8:N2} {1}' -f $NN++, "$([char]0x1b)[1;93m$($_.processname)$([char]0x1b)[0m", $_.CPU, ([long]($_.NPM / 1024))} {"done!"}
1
0 / 0 / 0
Регистрация: 27.03.2024
Сообщений: 35
01.04.2024, 18:41  [ТС]
Code
1
2
3
4
5
6
7
8
9
$i = 0; Get-Process | ForEach-Object {
    [pscustomobject] @{
        N           = ++$i
        'NPM(K)'    = [long]($_.NPM / 1024)
        Id          = $_.Id
        SI          = $_.SI
        ProcessName = $_.ProcessName
    }
} | Format-Table -HideTableHeaders
В этом-то и суть, не прибегая к Format-Table это реализовать. Задача как можно меньше ненужных действий

В данном случаи мы прибегаем к Format-Table, но зачем? Если и работать с format-table, то foreach-object вобще не нужен. Так как тоже самое реализуется через
Code
1
FORMAT-TABLE @{L= "NN"; E= { ($SCRIPT:COUNTER++) } }, Name, Value
А мне нужно добиться вывод как у Format-Table -HideTableHeaders
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
01.04.2024, 19:09
Цитата Сообщение от volodin661 Посмотреть сообщение
какая целевая задача ?
+1, какую проблему вы пытаетесь решить?

Добавлено через 3 минуты
superspagetti,
0
 Аватар для volodin661
6684 / 2276 / 347
Регистрация: 10.12.2013
Сообщений: 7,854
01.04.2024, 21:16
superspagetti,

посмотри на свой первоначальный вопрос :
Цитата Сообщение от superspagetti Посмотреть сообщение
Как добавить колонку к выводу командлета?
Про то, что надо избавиться от Шапки при выводе на экран, в теме нет ни слова.

Если речь идёт просто о выводе на экран, то идиоматически правильным решением является использование командлета Format-* с его встроенной возможностью отображения доп. свойств/колонок с помощью пользовательского хэша @{ L= ...; E=... }, где ключ 'L' ответственен за шапку, а ключ 'E' ответственен за вычисление собственно значения.


Если же тебя не интересуют уже реализованные возможности вывода свойств об'екта на экран,
то возникает вопрос: а какая, собственно, задача-то перед тобой стоит ?

Задача "не использовать командлет Format-Table и его опции" задачей не является;

Не хочешь - не пользуйся.

Альтернативой использования командлетов, соединённых трубочками |,
является использование энумераторов, в частности энумератора foreach
( да-да, чтоб жизнь мёдом не казалась, энумераторы и командлеты называются одинаково ) :


PowerShell
1
2
3
4
5
6
7
8
9
$n = 1
foreach ( $obj in gps ) {
    
    if ( $n -gt 20 ) {
 
        "{0} {1} {2} " -f $n++, $obj.NAME, $obj.CPU
    }  
 
}

энумератор избавлен от накладных расходов передавливания об'ектов порциями по трубе,
зато 'труба' умеет показывать об'екты сразу, не дожидаясь пока переберётся полностью весь массив.

Добавлено через 10 минут
добавление:

кроме автономного энумератора foreach есть ещё синтаксис
вызова энумератора для об'екта с помощью одноименного метода.
да-да, всё тот же foreach, но это уже метод .foreach(), поэтому и вызывается, как и все прочие методы, через точку '.'
с передачей параметра типа ScriptBlock

PowerShell
1
2
$n = 1
(gps).foreach( { '{0} {1} {2}' -f $n++, $_.Name, $_.CPU } )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2024, 21:16
Помогаю со студенческими работами здесь

Как в ТЧ документа добавить Колонку?
Мне нужно в ТЧ добавить колонку и потом ее обработать. Тип поля Булево и сохранять в документе мне его не нужно. Это просто признак печати...

Как добавить в DataGridView колонку
Как добавить в DataGridView колонку, если их количество (колонок) вводит сам пользователь.

Как добавить колонку из C# в MySQL
Всем привет! Суть в следующем: нужно добавить в созданную ранее мною базу колонку, добавление должно проходить из окна моей программы!...

Как добавить колонку в DataGridView?
У меня есть таблица на форме dataGridView1, мне нужно добавить в эту таблицу несколько колонок и строк, притом программно. В данном...

Как добавить третью колонку в вордпресс?
Как добавить третью колонку в вордпресс? Тема TwentyEleven. Нужна колонка справа и слева. Помогите кто знает как ))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru