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
MemberType
konsekwentnie - tutaj nie ma gwarancji).
Niektóre przełączniki, o których należy pamiętać w przypadku Get-Member
Get-Member
ma 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-Member
Komenda używa Mocy parametr dodać swoistych członków i kompilatora generowane z obiektów na ekranie. Get-Member
pobiera 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-Json
do dokładnej i czytelnej „serializacji”
Ja nie niezbędne polecić zapisywanie obiektów za pomocą JSON (stosowanie Export-Clixml
zamiast). 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 Depth
oznacza-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 -Compress
zrobić (tj. Usuń spacje)
PS Y:\Power> ConvertTo-Json $obj -Depth 420 -Compress
Użyj, -InputObject
jeś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 $obj
porę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-Member
dla każdego TypeName
w kolekcji (uwaga dla każdego TypeName
, nie dla każdego obiektu - zbiór N obiektów z takimi samymi TypeName
wypisuje tylko 1 tabelę TypeName
, a nie N tabel dla każdego obiektu) ...... po prostu trzymaj się go bezpośrednio.
-Force
parametr, aby działał, np.Write-Host ($obj | Format-List -Force | Out-String)