Kilka uwag ogólnych.
$obj | Select-Object ⊆ $obj | Select-Object -Property *
Ta ostatnia pokaże wszystkie nie wewnętrzne, nie wygenerowane przez kompilator właściwości. Pierwsza z nich nie wydaje się (zawsze) pokazywać wszystkich typów właściwości (w moich testach wydaje się, że pokazuje to CodeProperty MemberTypekonsekwentnie - tutaj nie ma gwarancji).
Niektóre przełączniki, o których należy pamiętać w przypadku Get-Member
Get-Memberma nie dostać elementy statyczne domyślnie. Nie możesz również (bezpośrednio) uzyskać ich razem z niestatycznymi członkami. Oznacza to, że użycie przełącznika powoduje zwrócenie tylko statycznych elementów członkowskich:
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)
...
Użyj -Force.
Get-MemberKomenda używa Mocy parametr dodać swoistych członków i kompilatora generowane z obiektów na ekranie. Get-Memberpobiera tych członków, ale domyślnie ich ukrywa.
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,...
...
Używaj ConvertTo-Jsondo dokładnej i czytelnej „serializacji”
Ja nie niezbędne polecić zapisywanie obiektów za pomocą JSON (stosowanie Export-Clixmlzamiast). Można jednak uzyskać mniej lub bardziej czytelne dane wyjściowe ConvertTo-Json, co pozwala również określić głębokość.
Zauważ, że brak określenia Depthoznacza-Depth 2
PS Y:\Power> ConvertTo-Json $obj -Depth 1
{
"AllowSystemOverload": true,
"AllowLifeToGetInTheWay": false,
"CantAnyMore": true,
"LastResortOnly": true,
...
A jeśli nie planujesz tego czytać, możesz to -Compresszrobić (tj. Usuń spacje)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Użyj, -InputObjectjeśli możesz (i chcesz)
99,9% czasu podczas korzystania z PowerShell: albo wydajność nie ma znaczenia, albo nie przejmujesz się wydajnością. Jednakże , należy zauważyć, że unikanie rurę, kiedy nie potrzeba może zaoszczędzić trochę napowietrznych i dodać trochę prędkości (rurociągi, ogólnie rzecz biorąc, nie jest super-wydajny).
Oznacza to, że jeśli masz wszystko, co masz, to jedna $objporęczna do drukowania (i nie jesteś tak leniwy jak ja, żeby czasami pisać -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
Uwaga na Get-Member -InputObject:
jeśli $ obj jest kolekcją (np. System.Object[]), W końcu uzyskujesz informacje o samym obiekcie kolekcji:
PS Y:\Power> gm -InputObject $obj,$obj2
TypeName: System.Object[]
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
Jeśli chcesz Get-Memberdla każdego TypeNamew kolekcji (uwaga dla każdego TypeName, nie dla każdego obiektu - zbiór N obiektów z takimi samymi TypeNamewypisuje tylko 1 tabelę TypeName, a nie N tabel dla każdego obiektu) ...... po prostu trzymaj się go bezpośrednio.
-Forceparametr, aby działał, np.Write-Host ($obj | Format-List -Force | Out-String)