2017-02-21 14 views
0

Мне нужно передать свойства командлету. То есть, один вызов я могу использоватьСвойства объекта Pass-Object для командлета

$SelList = "ProcessName,Handles" 

затем

get-process | select $sellist 

- Что выходит из строя. Мое предположение - это строковый массив, а не строка. И это должно быть сделано при вызове функции, поэтому следующий вызов может использовать

$SelList = "ProcessName,Handles,ID" 

Передача одного значения, например. $SelList = "ProcessName" похоже работа. Мое предположение - это то, что я (действительно, действительно) что-то забыл. Является ли небольшой цикл ForEach внутри «Select-Object»? Это казалось бы излишним, но (как уже упоминалось) я уверен, что я что-то пропускаю.

+0

Я считаю это ответил; реальной причиной проблемы была опечатка. –

ответ

4

Так почему бы вам не пройти массив?

$filter = @('ProcessName','Handles','ID') 
get-process | select $filter 

Кроме того, Get-Help Select-Object показывает следующее:

Select-Object [[-Property] <Object[]>] 

, который означает, что он принимает массивы

+0

Я думал, что это может быть так, но $ CSV1_list = @ ('OriginalName', 'CreatedOn') Import-Csv -Path "out.csv" -Delimiter ',' | Выберите -property $ CSV1_list | Первоначальное имя Sort-Object создает пробелы, следующие за «OriginalName CreatedOn» - если я использую Select Originalname, CreatedOn работает. –

+0

ну, я не телепат, но вот как это работает – 4c74356b41

+0

Черт возьми, я верю. Использование Import-Csv -Path "out.csv" -Delimiter ',' | Выберите -property * | Исходное имя Sort-Object работает. Мне нужно указать свойства, потому что те, которые нужны, будут отличаться от файла. –

-1

Ответ в том, что массив является способ сделать это. Итак, $ SelList = @ ('ProcessName', 'Handles') ... в моем случае это не решает проблему, поскольку передача массива все еще не выполняется. Однако это другая проблема.

+0

Учитывая, что @ 4c74356b41 уже предложил это решение, я предлагаю вам удалить этот ответ и принять его (и опубликовать новый вопрос о любых оставшихся проблемах, как было предложено). – mklement0

+0

Я добавлю последующие действия. Проверьте гайку за рулем. Мое описание было $ Sellist = @ ('ProcessName', 'Handles', 'ID'). Это было упрощенное. На самом деле $ Sellist1 = @ ('ProcessName', 'Handles', 'ID') было * предполагается *, за которым следует $ Sellist2 = @ ('ProcessName', 'ID') ... он НЕ работает, если вы сделал опечатку и то, что должно было быть $ SelList2, было другим «$ SelList1» с разными вещами вообще. После того, как я некоторое время отходил от сценария, я это увидел. Я ценю исправление, поскольку я (очевидно) шел по всему месту, отслеживая то, чего там не было. –

+0

У вашего вопроса в его нынешнем виде есть явное описание проблемы и получил полезные ответы. Это принесет большую пользу будущим читателям, если вы примете один из них (@ 4c74356b41 - это моя рекомендация).Если в миксе возникла другая проблема, и это была просто опечатка, упомяните об этом как о стороне _ в вашем вопросе_, ЕСЛИ вы думаете, что она представляет собой ловушку для других тоже - вместо того, чтобы быть одноразовой ошибкой (я не сделал полностью понимаю ваш комментарий). Затем вы можете удалить этот ответ (если вы этого не сделаете, он может привлечь больше голосов). – mklement0

0

просто перечислить список значений в массиве, как это, @() не является необходимым:

$filter = 'ProcessName','Handles','ID' 
get-process | select $filter 
+0

Ваш ответ дублирует @ 4c74356b41, только с меньшим объяснением (за исключением исключения '@ (...)', но это совершенно случайно, особенно без объяснения разницы). Получаю, что мы иногда пропустили предыдущие ответы и случайно их дублировали. Это было здесь? Если нет, я хотел бы знать, что побудило вас опубликовать этот ответ. – mklement0

+1

Я согласен с тобой, это немного дублировано, это было не мое намерение. Это было только для того, чтобы показать, что мы можем сделать еще короче. Мне нравится, когда код powershell прост и короток. Я добавлю упоминание «короче»;) – Esperento57

Смежные вопросы