2016-11-02 7 views
0

Я неофит PowerShell. Я понимаю, что когда вы запускаете команду PowerShell, она отправляет поток объектов в качестве вывода.Метаданные команды PowerShell

Например:

PS C:\Users\JGodse\scripts> Get-WmiObject -Class win32_Product 


IdentifyingNumber : {90150000-008C-0000-0000-0000000FF1CE} 
Name    : Office 15 Click-to-Run Extensibility Component 
Vendor   : Microsoft Corporation 
Version   : 15.0.4867.1003 
Caption   : Office 15 Click-to-Run Extensibility Component 

IdentifyingNumber : {90150000-008C-0409-0000-0000000FF1CE} 
Name    : Office 15 Click-to-Run Localization Component 
Vendor   : Microsoft Corporation 
Version   : 15.0.4867.1003 
Caption   : Office 15 Click-to-Run Localization Component 

IdentifyingNumber : {90150000-008F-0000-1000-0000000FF1CE} 
Name    : Office 15 Click-to-Run Licensing Component 
Vendor   : Microsoft Corporation 
Version   : 15.0.4867.1003 
Caption   : Office 15 Click-to-Run Licensing Component 


....... (and many more such objects)...... 

Объектов имеют свойство (IdentifyingNumber, имя, поставщик, версия, Caption). Из этого я могу конвейер объекты на что-то вроде этого, чтобы выбрать имя:

PS C:\Users\JGodse\scripts> Get-WmiObject -Class win32_Product | select name 

name 
---- 
Office 15 Click-to-Run Extensibility Component 
Office 15 Click-to-Run Localization Component 
Office 15 Click-to-Run Licensing Component 
Microsoft .NET Framework 4.5.1 Multi-Targeting Pack 

Есть ли способ, чтобы получить список имен атрибутов объектов, возвращаемых командой, не выполнив команду и визуально анализа вывода ? Возможно, команда, как мифический Get-атрибуты:

PS C:\> Get-Attributes Get-WmiObject 

attributes 
---------- 
IdentifyingNumber, Name, Vendor, Version, Caption 
+0

Вы ищете [ 'Get-Member'] (https://technet.microsoft.com/en-us/library/hh849928.aspx). –

+0

Get-WmiObject -Class win32_Product | выберите -first 1 | Get-Member | ? {$ _. MemberType -eq 'Свойство'} –

ответ

1

Командлета вы ищете получить члены, однако он получит вам свойство, доступное на объекте, а не те, которые могут возникнуть в результате командлета. Это связано с тем, что в зависимости от того, какие аргументы вы предоставляете, вы будете возвращать объекты с разными результатами. (например, get-wmiobject возвращает разные объекты для разных классов). Вы бы использовали его, как показано ниже.

Get-wmiobject win32_operatingsystem | Get-member

Это поможет вам список всех свойств и методов, доступных для объекта, представляющих компьютеры Win32_OperatingSystem класса WMI. Ссылка ниже содержит дополнительную информацию и примеры.

https://technet.microsoft.com/en-us/library/ee176854.aspx

+0

В Ruby, который я использовал (myObject.methods - Object.methods), и это даст соответствующие методы, доступные для этого объекта. Вы дали мне эффективный эквивалент myObject.methods. Есть ли способ избавиться от во многом ненужных методов? –

+0

Ничего мне известно, прошло некоторое время с тех пор, как я сделал любой Ruby, но Object.methods представляет собой общий набор методов, доступных для любого объекта. если это так, то, насколько мне известно, действительно нет аналога в powershell/.NET, методы, доступные для system.object, довольно ограничены (только 4 из них), поэтому нет необходимости их отфильтровывать. вы можете добавить '| Where-object {$ _. Definition -notlike "* system.object *"} 'для удаления методов, которые наследуются от system.object, но это только обрезает 4 метода из вашего результата. –

+1

'Get-Member -Type Method' должно быть достаточно. –

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

  • Нет связанных вопросов^_^