Wenn ich in der interaktiven Konsole ein neues Objekt definiere und ihm einige Eigenschaftswerte wie folgt zuweise:
$obj = New-Object System.String
$obj | Add-Member NoteProperty SomeProperty "Test"
Wenn ich dann den Namen meiner Variablen in das interaktive Fenster eingebe, gibt mir Powershell eine Zusammenfassung der Objekteigenschaften und -werte:
PS C:\demo> $obj
SomeProperty
------------
Test
Ich möchte im Grunde nur dies tun, aber innerhalb einer Funktion in einem Skript. Die Funktion erstellt ein Objekt und legt einige Eigenschaftswerte fest. Ich möchte, dass eine Zusammenfassung der Objektwerte im Powershell-Fenster ausgedruckt wird, bevor sie zurückgegeben wird. Ich habe versucht, Write-Host innerhalb der Funktion zu verwenden:
Write-Host $obj
Dabei wird jedoch nur der Typ des Objekts ausgegeben, nicht die Zusammenfassung:
System.Object
Wie kann meine Funktion eine Zusammenfassung der Eigenschaftswerte des Objekts im Powershell-Fenster ausgeben?
quelle
-Force
Parameter übergeben, damit es funktioniert, zBWrite-Host ($obj | Format-List -Force | Out-String)
...
. Ich habe einen Liebeshass mit POSH$objs = @();
und$objs = $objs + $obj;
ich kann verwendenConvertTo-Html
: $ cols = $ objs | ConvertTo-Html -Fragment -Property Name, Datentyp, Standard, Identität, InPrimaryKey, IsForeignKey, Beschreibung;Meine Lösung für dieses Problem bestand darin, den Unterausdruckblock $ () zu verwenden .
Gibt:
quelle
So drucken Sie die Eigenschaften und Werte des Objekts in Powershell aus Die folgenden Beispiele funktionieren gut für mich.
$ pool = Get-Item "IIS: \ AppPools.NET v4.5"
$ pool | Get-Member
$ pool | Select-Object -Property * # Sie können -Property weglassen
quelle
$x | select *
, ideal für interaktive.Tipp 1
Tipp 12
-Don Jones: PowerShell-Meister
Idealerweise würde Ihr Skript Ihre Objekte erstellen (
$obj = New-Object -TypeName psobject -Property @{'SomeProperty'='Test'}
) und dann einfach aWrite-Output $objects
. Sie würden die Ausgabe an weiterleitenFormat-Table
.Sie sollten PowerShell PowerObjectandPipingShell wirklich aufrufen.
quelle
Never use Write-Host.
Aussage. Sie können Write-Output nicht in Funktionen verwenden, die Daten zurückgeben, da diese Funktion dadurch "verschmutzt" wird. Einfaches Beispiel. Ratet mal, welche ReturnText-Funktion ausgegeben wird? Deshalb benutze ich immer Write-Host innerhalb von Funktionen. Funktion ReturnText () {Write-Output "Eine zufällige Nachricht" return "Was ich zurückgeben möchte"}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
MemberType
konsistent zu sein - hier keine Garantien).Einige Schalter, die Sie für Get-Member beachten sollten
Get-Member
erhä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:Verwenden Sie die
-Force
.Verwenden
ConvertTo-Json
für Tiefe und lesbare "Serialisierung"Ich mache nicht notwendig empfehlen Speicher Objekte mit JSON (Verwendung
Export-Clixml
statt). Sie können jedoch eine mehr oder weniger lesbare Ausgabe erhaltenConvertTo-Json
, mit der Sie auch die Tiefe angeben können.Beachten Sie, dass keine Angabe
Depth
impliziert-Depth 2
Und wenn Sie nicht vorhaben, es zu lesen, können Sie
-Compress
es (dh Leerzeichen entfernen)Verwenden
-InputObject
Sie, 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
$obj
Handy zum Drucken haben (und nicht zu faul sind wie ich, um es manchmal abzutippen-InputObject
):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:Wenn Sie möchten ,
Get-Member
für jedenTypeName
in der Sammlung (für jede NBTypeName
, nicht für jedes Objekt - eine Sammlung von N - Objekten mit all gleichTypeName
wird 1 Tabelle druckt nur für dasTypeName
, nicht N - Tabellen für jedes Objekt) ...... Bleib einfach bei der direkten Verrohrung.quelle
Das Folgende hat wirklich gut für mich funktioniert. Ich habe alle oben genannten Antworten zusammengefügt und über das Anzeigen von Objekteigenschaften im folgenden Link gelesen und die folgende kurze Lektüre zum Drucken von Objekten gefunden
Fügen Sie einer Datei mit dem Namen print_object.ps1 den folgenden Text hinzu:
Öffnen Sie die Powershell-Eingabeaufforderung, wechseln Sie in das Verzeichnis, in dem diese Datei vorhanden ist, und geben Sie Folgendes ein:
Ersetzen Sie einfach 'System.DateTime' durch das Objekt, das Sie drucken möchten. Wenn das Objekt null ist, wird nichts ausgedruckt.
quelle
quelle