Как просмотреть все дочерние свойства в Power Shell - PullRequest
0 голосов
/ 14 января 2020

При запросе свойств объекта Power Shell я хочу знать, имеют ли перечисленные свойства дочерние свойства, которые могут предоставить мне полезную информацию, но ни команда Get-Member, ни параметр Select-Object -ExpandProperty не предлагают мне способ получить эту информацию для всех свойств заранее.

Например, если я выполню команду «Get-Member -MemberType Property» для экземпляра объекта сертификата X509, я получу список из 18 свойств включая «Archived», «Extensions», «FriendlyName» и т. д. c.

Большинство из этих свойств не имеют дочерних свойств, но по крайней мере одно из них - свойство «Extensions» - имеет.

В свою очередь, некоторые из этих дочерних свойств имеют свои собственные дочерние свойства.

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

Есть ли способ получить эту информацию или кто-то написал запрос, который отобразит все дочерние свойства свойств верхнего уровня?

Я немного осмотрелся и ничего не нашел.

Я пытался составить сценарий запроса, но пока он не дал хороших результатов.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Я обычно использую Format-Custom с -Depth для свойств, которые вы хотите расширить. Вот пример отображения только свойства Extensions.

Изменение значения по умолчанию $FormatEnumerationLimit на -1 также позволит отображать все перечисляемые значения свойств:

# Remove limit from enumeration limit which is 4 by default
$FormatEnumerationLimit=-1

# Use Format-Custom with the depth required:
Get-ChildItem -Path 'Cert:\CurrentUser\CA\' | Select-Object -First 1 -Property Extensions | Format-Custom -Depth 1

Вывод:

class X509Certificate2
{
  Extensions = 
    [
      System.Security.Cryptography.X509Certificates.X509BasicConstraintsExtension
      System.Security.Cryptography.X509Certificates.X509Extension
      System.Security.Cryptography.X509Certificates.X509KeyUsageExtension
      System.Security.Cryptography.X509Certificates.X509Extension
      System.Security.Cryptography.X509Certificates.X509Extension
      System.Security.Cryptography.X509Certificates.X509Extension
      System.Security.Cryptography.X509Certificates.X509SubjectKeyIdentifierExtension
      System.Security.Cryptography.X509Certificates.X509Extension
    ]

}
0 голосов
/ 14 января 2020

Что-то вроде этого - «ядерный вариант» для меня. Обычно я все равно не могу найти то, что хочу:

get-process cmd | fc * | findstr /i whatever

См. Также Как просмотреть все свойства объекта PowerShell

0 голосов
/ 14 января 2020

Я обычно выполняю sh то, что вы ищете, просто конвертируя в json.

По умолчанию ConvertTo-Json имеет глубину 4 элемента. Поскольку вам нужны только верхние свойства и их дочерние элементы, вы можете уменьшить -depth до 2.

#Selecting the first certificate just for demonstration purposes.
$YourObject = (get-childitem -Path 'Cert:\CurrentUser\CA\')[0]

# This will work with any objects.
$YourObject | ConvertTo-Json -Depth 2

Вот частичный взгляд на результирующий запрос:

{
    "Archived":  false,
    "Extensions":  [
                       {
                           "Critical":  false,
                           "Oid":  "System.Security.Cryptography.Oid",
                           "RawData":  "48 33 48 31 6 8 43 6 1 5 5 7 48 1 134 19 104 116 116 112 58 47 47 115 50 46 115 121 109 99 98 46 99
111 109"
                       },
                       {
                           "CertificateAuthority":  true,
                           "HasPathLengthConstraint":  true,
                           "PathLengthConstraint":  0,
                           "Critical":  true,
                           "Oid":  "System.Security.Cryptography.Oid",
                           "RawData":  "48 6 1 1 255 2 1 0"
                       },

(Я вставил только небольшой фрагмент)

Вы можете легко увидеть такие свойства, как Расширения, их дочерние свойства и связанные значения.

Дополнительные примечания

Если вы опустите параметр -depth для ConvertTo-Json, он вернется на глубину 4.

Глубина настраивается до 100 уровней. При этом у некоторого объекта будут свойства, которые восстанавливаются на объекте, поэтому, если это не нужно, вам не следует излишне указывать там максимальное значение.

...