Есть ли у Powershell «эквивалентный» эквивалент? Есть ли лучший способ увидеть список свойств и значений? - PullRequest
6 голосов
/ 17 марта 2010

Я делаю немного сценариев Powershell (впервые), чтобы посмотреть на некоторые вещи на сайте Sharepoint, и что я хотел бы сделать, это просмотреть список свойств объекта и просто вывести их значения в формате «property-name = value».

Теперь я могу найти список элементов, используя это:

$myObject | get-member -membertype property

Который вернет список всех свойств в очень четкой и понятной форме. Но мне нужно найти значение для этих свойств.

В некоторых языках сценариев у меня может быть своего рода вызов eval ("$ myObject. $ PropertyName") - где я извлек $ propertyName из вывода get-member - и он может оценить строку как код, который вроде бы быстрое и грязное решение, которое мне нужно, было бы хорошо.

Существует ли это в Powershell или есть более удобный способ сделать это? Должен ли я использовать отражение вместо этого?

Ответы [ 3 ]

8 голосов
/ 17 марта 2010

Чтобы получить значение свойств объекта, вы можете использовать несколько методов.

Прежде всего, вы можете использовать Select-Object и использовать параметр -Property, чтобы указать, какие значения свойств вы хотите вернуть. То, как это будет отображаться, будет зависеть от количества указанных вами свойств и типа объекта. Если вам нужны все свойства, вы можете использовать подстановочный знак (*), чтобы получить их все.

Пример -

$myobject | Select-Object -Property name, length
$myobject | Select-Object -Property *

Вы также можете управлять форматированием выходов аналогичным образом, используя Format-List или Format-Table.

Пример -

$myobject | Format-List -Property *
$myobject | Format-Table -Property name, length

Наконец, для вывода в стиле "eval" вы можете просто набрать

$myobject."$propertyname" 

и значение свойства будет возвращено.

1 голос
/ 21 марта 2010

Для этого я бы порекомендовал использовать Format-List -force, например ::

Get-Process | Format-List * -Force

-Force является необязательным, но иногда PowerShell скрывает свойства, которые я действительно хочу увидеть.

1 голос
/ 17 марта 2010

Для вас лучшим выбором будет Format-Custom.

get-date | Format-Custom -Depth 1 -Property * 
get-childitem . | select-object -first 1 | Format-Custom -Depth 1 -Property *

Возможно, это слишком многословно, но полезно;)


Или вы действительно можете использовать Get-Member

$obj = get-date
$obj | 
   gm -MemberType *property | 
   % { write-host ('{0,-12} = {1}' -f $_.Name, $obj.($_.Name)) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...