Как использовать командлет PowerShell Get-Member - PullRequest
13 голосов
/ 21 марта 2009

Вопрос новичка:

Команда:

[Math] | Get-Member

Возвращает всех членов System.RuntimeType. Почему это так?

Также команда:

Get-Member -InputObject [Math]

Возвращает всех членов System.String. Если [Math] интерпретируется здесь как строка, как я могу сделать это математическим объектом?

Кроме того, Get-member принимает какие-либо позиционные параметры? Как я могу сказать?

Ответы [ 4 ]

21 голосов
/ 21 марта 2009

Вы получаете System.RuntimeType от [Math], потому что это то, что есть. Это тип класса, в отличие от объекта этого конкретного типа. Вы на самом деле не создали объект [Math]. Вы получите тот же вывод, если наберете:

[String] | gm

Однако, если вы сконструировали строковый объект из типа String, вы получите строковые члены:

PS C:\> [String]("hi") | gm


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value), System.Int32 CompareTo(String strB)
Contains         Method                System.Boolean Contains(String value)
CopyTo           Method                System.Void CopyTo(Int32 sourceIndex, Char[] destination, Int32 destinationIn...
etc...

Поскольку System.Math имеет только статические члены, вы не можете создать его объект. Чтобы увидеть его участников, вы можете использовать функцию GetMembers () System.RuntimeType:

[Math].GetMethods()

Вы можете использовать один из командлетов format- * для форматирования вывода:

[Math].GetMethods() | format-table

Редактировать: О, и я должен добавить, чтобы вызвать один из статических членов, вы бы сделали это так:

[Math]::Cos(1.5)
8 голосов
/ 22 марта 2009

Я только что написал в блоге исследование статических членов классов с помощью PowerShell , что может помочь.

Что происходит, когда вы передаете [Math] в Get-Member, вы передаете объект System.RunTimeType, и он возвращает элементы этого типа.

Существует параметр переключателя для Get-Member, который позволяет вам проверить все статические члены класса:

[Math] | get-member -static

Если вам нужно найти члены экземпляра, вам нужно будет создать экземпляр класса и канал для Get-Member.

1 голос
/ 06 сентября 2011
  1. Используя команду get-help get-member, вы получите этот вывод

NAME Get-Member

СИНТАКСИС Получает свойства и методы объектов.

СИНТАКСИС Get-Member [[-Name]] [-Force] [-InputObject] [-MemberType {AliasProperty | CodeProperty | профессионал Perty | NoteProperty | ScriptProperty | Свойства | PropertySet | Метод | CodeMethod | ScriptMethod | Методы | п arameterizedProperty | MemberSet | Событие | Все}] [-Static] [-View {Extended | Адаптированный | База | Все}] []

ОПИСАНИЕ Командлет Get-Member получает "члены" (свойства и методы) объектов.

To specify the object, use the InputObject parameter or pipe an object to Get-Member. To retrieve information about
 static members (members of the class, not of the instance), use the Static parameter. To get only certain types of
 members, such as NoteProperties, use the MemberType parameter.

СВЯЗАННЫЕ ССЫЛКИ Онлайн версия: http://go.microsoft.com/fwlink/?LinkID=113322 Добавить члена Получить помощь Get-Command Get-PSDrive

СЛОВО Чтобы увидеть примеры, введите: «get-help Get-Member -examples». Для получения дополнительной информации введите: «get-help Get-Member -detailed». Для получения технической информации введите: «get-help Get-Member -full».

  1. Из приведенного выше оператора видно, что get-member принимает только объекты, а не классы. Вы используете -Static для просмотра статических членов объекта.

  2. Когда вы используете [String] без параметра -Static, вы сообщаете PowerShell, что вы помещаете объект типа [String], однако вы еще не создали объект String из любого вашего оператора, поэтому предполагается, что [String] является объектом System.Runtime, представляющим класс String. Это аналогично, если вы используете [Int] или [Boolean] и другие типы классов.

  3. Однако, если вы используете параметр -Static, интерпретатор powershell теперь понимает, что вам нужны статические члены String Objects.

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

Кроме того, получает ли Get-member какие-либо позиционные параметры? Как я могу сказать?

Если имя параметра заключено в '[]', то имя является необязательным, поэтому параметр является позиционным. Например, для Get-Member (определение ниже), Name является позиционным, а InputObject - нет.

Get-Member [[-Name]] [-Force] [-InputObject] [-MemberType {AliasProperty | CodeProperty | Pro Perty | NoteProperty | ScriptProperty | Свойства | PropertySet | Метод | CodeMethod | ScriptMethod | Методы | P arameterizedProperty | MemberSet | Событие | Все}] [-Static] [-Просмотр {Расширенный | Адаптированный | База | Все}] []

По первым 1 вопросам кажется, что вы ожидаете, что они будут вести себя как объекты, но вы входите в пространство имен / класс. Если вы выполните «1 | gm» или «gm -inputobject 1», вы увидите, что вы хотите / ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...