2016-11-02 2 views
0

Ich bin ein PowerShell-Neophyt. Ich verstehe, dass bei der Ausführung eines PowerShell-Befehls ein Stream von Objekten als Ausgabe gesendet wird.PowerShell Befehl Metadaten

Zum Beispiel:

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)...... 

Die Objekte haben die Eigenschaften (IdentifyingNumber, Name, Hersteller, Version, Beschriftung). Daraus kann ich Rohr die Objekte so etwas wie dieses den Namen wählen:

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 

Gibt es eine Möglichkeit, eine Liste von Attributnamen der Objekte durch einen Befehl zurück zu bekommen, ohne den Befehl ausgeführt wird und visuell Parsen der Ausgabe ? Vielleicht ein Befehl wie ein mythisches Get-Attribute:

PS C:\> Get-Attributes Get-WmiObject 

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

Sie suchen nach [ 'Get-Member'] (https://technet.microsoft.com/en-us/library/hh849928.aspx). –

+0

Get-WmiObject -Klasse win32_Product | Wählen Sie -first 1 | Get-Mitglied | ? {$ _. MemberType -eq 'Eigenschaft'} –

Antwort

1

Die Cmdlet Sie suchen, sind get-member, aber es wird Ihnen die Eigenschaften für ein Objekt zur Verfügung bekommt, nicht diejenigen, die von einem Cmdlets führen könnten. Dies liegt daran, dass Sie abhängig davon, welche Argumente Sie angeben, Objekte mit unterschiedlichen Ergebnissen zurückerhalten. (Zum Beispiel gibt get-wmiobject verschiedene Objekte für verschiedene Klassen zurück). Sie würden es wie folgt verwenden.

Get-wmiobject win32_operatingsystem | Get-member

, dass Sie eine Liste aller verfügbaren Eigenschaften und Methoden zum Objekt, das die Computer WMI-Klasse Win32_OperatingSystem erhalten. Der Link unten enthält zusätzliche Informationen und Beispiele.

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

+0

In Ruby habe ich das gemacht (myObject.methods - Object.methods), und das würde die relevanten Methoden ergeben, die für dieses Objekt verfügbar sind. Sie haben mir das effektive Gegenstück zu myObject.methods gegeben. Gibt es eine Möglichkeit, die weitgehend irrelevanten Methoden los zu werden? –

+0

Nichts, was mir bekannt ist, war eine Weile her, seit ich Ruby gemacht habe, aber Object.methods repräsentiert eine generische Sammlung von Methoden, die für jedes Objekt verfügbar sind, oder? Wenn ja, gibt es in powershell/.NET wirklich kein Analog, soweit mir bekannt ist, sind die Methoden, die für system.object verfügbar sind, ziemlich begrenzt (nur 4 von ihnen), so dass es nicht wirklich notwendig ist, sie herauszufiltern. Sie könnten ein '| hinzufügen Where-Objekt {$ _. Definition -nichtlike "* system.object *"} 'um die Methoden zu entfernen, die von system.object erben, aber das wird nur 4 Methoden von Ihrem Ergebnis abschneiden. –

+1

'Get-Member -Type-Methode 'sollte ausreichen. –

Verwandte Themen