Я делаю немного Powershell, пишущий сценарий (впервые) для рассмотрения некоторого материала в сайте Sharepoint и что я хотел бы смочь сделать, должен пройти список свойств объекта и просто произвести их значения на "имя свойства = значение" вид формата.
Теперь я могу найти список элементов с помощью этого:
$myObject | get-member -membertype property
Который возвратит список всех свойств очень ясным и читаемым способом. Но то, в чем я нуждаюсь, должно найти значение для тех свойств.
В некоторых языках сценариев у меня могла быть своего рода оценка ("$myObject.$propertyName") вызов - где я извлек $propertyName из вывода получать-участника - и имею его, оценивают строку как код, в котором для вида быстрого-и-грязного решения я нуждаюсь, был бы прекрасен.
Это существует в Powershell или является там более удобным способом сделать это? Я должен использовать отражение вместо этого?
Чтобы получить значение свойств объекта, вы можете использовать несколько методов.
Во-первых, вы можете использовать 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"
, и значение свойства будет возвращено.
Для вас лучшим выбором будет Формат-Пользовательский
.
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)) }
Для этого я бы рекомендовал использовать Format-List -force, например:
Get-Process | Format-List * -Force
-Force необязателен, но иногда PowerShell скрывает свойства, которые я действительно хочу видеть.