Einige allgemeine Hinweise.
$obj | Select-Object ⊆ $obj | Select-Object -Property *
Letzteres zeigt alle nicht intrinsischen, nicht vom Compiler generierten Eigenschaften an. Ersteres scheint nicht (immer) alle Eigenschaftstypen anzuzeigen (in meinen Tests scheint es jedoch CodeProperty MemberTypekonsistent zu sein - hier keine Garantien).
Einige Schalter, die Sie für Get-Member beachten sollten
Get-Membererhält standardmäßig keine statischen Mitglieder. Sie können sie auch nicht (direkt) mit den nicht statischen Mitgliedern zusammenbringen. Das heißt, bei Verwendung des Schalters werden nur statische Elemente zurückgegeben:
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
...
Verwenden Sie die -Force.
Der Get-MemberBefehl verwendet den Force- Parameter, um die intrinsischen Elemente und vom Compiler generierten Elemente der Objekte zur Anzeige hinzuzufügen. Get-MemberRuft diese Mitglieder ab, versteckt sie jedoch standardmäßig.
PS Y:\Power> $obj | Get-Member -Static
TypeName: System.IsFire.TurnUpProtocol
Name MemberType Definition
---- ---------- ----------
...
pstypenames CodeProperty System.Collections.ObjectModel.Collection...
psadapted MemberSet psadapted {AccessRightType, AccessRuleType,...
...
Verwenden ConvertTo-Json für Tiefe und lesbare "Serialisierung"
Ich mache nicht notwendig empfehlen Speicher Objekte mit JSON (Verwendung Export-Clixmlstatt). Sie können jedoch eine mehr oder weniger lesbare Ausgabe erhalten ConvertTo-Json, mit der Sie auch die Tiefe angeben können.
Beachten Sie, dass keine Angabe Depthimpliziert-Depth 2
PS Y:\Power> ConvertTo-Json $obj -Depth 1
{
"AllowSystemOverload": true,
"AllowLifeToGetInTheWay": false,
"CantAnyMore": true,
"LastResortOnly": true,
...
Und wenn Sie nicht vorhaben, es zu lesen, können Sie -Compresses (dh Leerzeichen entfernen)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Verwenden -InputObjectSie, wenn Sie können (und bereit sind)
99,9% der Zeit bei Verwendung von PowerShell: Entweder spielt die Leistung keine Rolle, oder Sie interessieren sich nicht für die Leistung. jedoch sollte es , dass das Rohr zu vermeiden zu beachten , wenn Sie es nicht brauchen kann einigen Aufwand sparen und etwas Geschwindigkeit hinzufügen (Rohrleitungen, in der Regel nicht super-effizient ist).
Das heißt, wenn Sie nur ein einziges $objHandy zum Drucken haben (und nicht zu faul sind wie ich, um es manchmal abzutippen -InputObject):
# select is aliased (hardcoded) to Select-Object
PS Y:\Power> select -Property * -InputObject $obj
# gm is aliased (hardcoded) to Get-Member
PS Y:\Power> gm -Force -InputObject $obj
Vorsichtsmaßnahme für Get-Member -InputObject:
Wenn $ obj eine Sammlung ist (z. B. System.Object[]), erhalten Sie am Ende Informationen über das Sammlungsobjekt selbst:
PS Y:\Power> gm -InputObject $obj,$obj2
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
Wenn Sie möchten , Get-Memberfür jeden TypeNamein der Sammlung (für jede NB TypeName, nicht für jedes Objekt - eine Sammlung von N - Objekten mit all gleich TypeNamewird 1 Tabelle druckt nur für das TypeName, nicht N - Tabellen für jedes Objekt) ...... Bleib einfach bei der direkten Verrohrung.
-ForceParameter übergeben, damit es funktioniert, zBWrite-Host ($obj | Format-List -Force | Out-String)