2017-12-22 5 views
1

ProblemMultiple Select-Object als Punktnotation

Ich möchte wissen, ob es eine einfache Möglichkeit, mehrere Objekte in einem WMI-Objekt oder CIM-Instanz zu suchen.

Ich bin bewusst, dass es mit Befehlen wie

Get-CimInstance Win32_BaseBoard | Select-Object Manufacturer,Product 

möglich ist, aber ich mag einen Befehl mit einer Punktnotation, wo Sie mehrere Objekte für eine Suche wie (Get-CimInstance Win32_BaseBoard).Manufacturer mit mehr als einem Objekt festlegen.

So etwas wie (Get-CimInstance Win32_BaseBoard).Object1.Obejct2.Object3

+2

Dot Notation nicht wie das funktioniert. Sie könnten jedoch so etwas tun: ''Hersteller', 'Produkt' | % {(Get-CimInstance Win32_BaseBoard).$ _} ' – BenH

+0

Danke BenH! Das wird ausreichen, um mein Problem zu lösen. Wenn jemand eine andere Lösung kennt, kann er sie in den Kommentaren teilen. –

Antwort

1

Ben-Lösung aus den Kommentaren funktioniert, aber beachten Sie, dass es Get-CimInstance einmal für jede Eigenschaft nennt man will, auch wenn das nicht notwendig ist (könnte eine Weile dauern, je nach dem Anruf Sie machen).

Schauen wir uns ein paar andere Möglichkeiten an. Wir beginnen damit, die gewünschten Eigenschaftsnamen in einem Array zu speichern.

$properties = 'Manufacturer', 'Product' 

Jetzt können wir etwas Ähnliches tun, was Ben tat

$allValues = $properties | 
    ForEach-Object -Begin { 
     $bb = Get-CimInstance Win32_Baseboard 
    } -Process { 
     $bb.$_ 
    } 

, dass sein Ansatz hält aber funktioniert die CIM Anruf einmal.

Wenn Sie mit Punktnotation tun wollen rein, können Sie die .ForEach()-Methode und die .PSObject versteckte Eigenschaft an den Eigenschaften zu erhalten:

(Get-CimInstance Win32Baseboard).ForEach({$_.PSObject.Properties.Where({$_.Name -in $properties}).Value}) 
0

Wie bereits erwähnt, DotNotation (Intellisense) 1: 1/Einzelknoten/Sammel Sache. Sie können dies überprüfen, indem Sie das Ergebnis des Aufrufs an XML übergeben und die Knoten durchlaufen.

(Get-CimInstance Win32_BaseBoard | ConvertTo-Xml).Objects.Object.Property 
(Get-CimInstance Win32_BaseBoard | ConvertTo-Xml).Objects.Object.Property.name 
(Get-CimInstance Win32_BaseBoard | ConvertTo-Xml).Objects.Object.Property.'#text' 

Die einzige andere Option aus der Spitze von meinem Kopf ist die Konstruktion einen Proxy, Aufzählungen und schaltet für alle möglichen Eigenschaften für die Namespace Sie verwenden verwendet.

Das ist viel mehr unnötigen Aufwand und Code, um nur zu tun, was BenH darauf hingewiesen hat, speziell weil Sie das für jede Klasse tun müssten.

Nun, wenn Sie sich nur zu Kurzschrift wollen, vielleicht tun, um diesen

$Base = Get-CimInstance Win32_BaseBoard 
$Base.Manufacturer;$base.Model;$base.Name;$Base.PartNumber 

Aber das ist nur unhandlich, vor allem, da all dies wirklich einzelne Befehle eingestellt mit dem Befehl Pause Separator in einer einzigen Zeile ist zu tun das Semikolon. Was ist eine falsche Sache zu tun. MEINER BESCHEIDENEN MEINUNG NACH.

--- kleine rant --- Wenn Sie den Separator brauchen, dann legen Sie einfach das nächste Ding auf eine neue Linie und vermeiden Sie das Semikolon. Ich meine, ich kann dieses Semikolon als den PoSH-Konsolen-Host verwenden, aber in einem echten Skript, Funktion, Modul, nun, einfach, nein. Auch hier IMHO --- kleine Tirade ---

Schließlich je nachdem, was Ihr Ziel Posh-Version ist, hatte DotNotation Probleme in v2 - v3 Tage

+0

Welche Probleme hatte Punktnotation in v2/v3? – briantist

+0

Ich hatte Probleme, wenn Sie DN auf v3 verwenden, aber den Code an v2-Systeme senden. Ähnliche Merkwürdigkeiten waren bis jetzt von mehreren anderen Leuten gemeldet worden. Siehe: 'community.spiceworks.com/topic/581356-can-someone-explain-ps-dot-notation' Siehe Martin9700's Kommentar. – postanote

+0

Das ist kein Problem so sehr wie es ist eine bekannte Feature-Änderung, die von V2 zu V3 passiert ist, die genau das ist, was Martin9700 Kommentar (und am meisten danach) beschreiben. Die Verwendung von Sprachfeatures, die in Version 3 in Version 2 eingeführt wurden, ist nicht wirklich eine vernünftige Erwartung. Seither gab es keine weiteren Syntaxänderungen, und sowohl in v2 als auch in v3 + funktioniert die Syntax wie beschrieben/beabsichtigt. – briantist

Verwandte Themen