Wybieranie danych
Uruchomienie polecenia może być zaawansowane, pobieranie danych z komputera lokalnego lub z całej sieci. Aby być jeszcze bardziej efektywnym, musisz dowiedzieć się, jak uzyskać żądane dane. Większość poleceń działa na obiektach, jako danych wejściowych lub wyjściowych albo obu tych poleceń. Obiekty mają właściwości i możesz chcieć uzyskać dostęp do podzbioru tych właściwości i przedstawić je w raporcie. Możesz również posortować dane na podstawie co najmniej jednej właściwości. Ale jak się tam dostać?
Sprawdzanie danych wyjściowych za pomocą polecenia Get-Member
Po przekazaniu wyników polecenia do Get-Member
metody Get-Member
zwraca informacje o obiekcie, takie jak:
- Typ obiektu przekazywanego do elementu Get-Member.
- Właściwości obiektu, który można ocenić.
- Metody obiektu, który można wykonać.
Zademonstrujmy ten fakt, uruchamiając polecenie Get-Member
Get-Process
.
Get-Process | Get-Member
Zwróć uwagę, że używasz potoku |
i Get-Member
wywołujesz metodę , w rzeczywistości tworzysz potok. Pierwsze kilka wierszy danych wyjściowych z poprzedniej instrukcji wygląda następująco:
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64
...
Dane wyjściowe pokazują typ obiektu zwracanego przez Get-Process
polecenie (System.Diagnostics.Process
). Pozostała część odpowiedzi przedstawia nazwę, typ i definicję elementów członkowskich obiektu. Możesz zobaczyć, że jeśli chcesz dopasować się Get-Process
do innego polecenia w potoku, parowanie z nim Get-Member
jest dobrym pierwszym krokiem.
Select-Object
Domyślnie po uruchomieniu polecenia, które będzie wyświetlać dane wyjściowe na ekranie, program PowerShell automatycznie dodaje polecenie Out-Default
. Gdy dane wyjściowe są kolekcją obiektów, program PowerShell analizuje typ obiektu, aby określić, czy istnieje zarejestrowany widok dla tego typu obiektu. Jeśli go znajdzie, używa tego widoku.
Widok zazwyczaj nie zawiera wszystkich właściwości obiektu, ponieważ nie będzie on poprawnie wyświetlany na ekranie, więc tylko niektóre z najbardziej typowych właściwości są uwzględnione w widoku.
Widok domyślny można zastąpić przy użyciu polecenia Select-Object
i wybrać własną listę właściwości. Następnie możesz wysłać te właściwości do Format-Table
lub Format-List
, aby wyświetlić tabelę tak, jak chcesz.
Rozważ wynik uruchomienia Get-Process
procesu zsh
:
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
0 0.00 0.01 0.38 727 727 zsh
0 0.00 0.01 0.38 731 731 zsh
0 0.00 0.01 0.38 743 743 zsh
0 0.00 0.01 0.38 750 750 zsh
0 0.00 0.88 0.91 15747 …47 zsh
0 0.00 0.01 0.29 41983 …83 zsh
0 0.00 1.16 0.31 68298 …98 zsh
Widoczny jest widok reprezentujący to, co najprawdopodobniej chcesz zobaczyć z tego polecenia. Jednak ten widok nie pokazuje pełnego zestawu informacji. Aby zobaczyć coś innego, możesz jawnie określić właściwości, które chcesz zobaczyć w wyniku.
Uzyskiwanie pełnej odpowiedzi
To, co widzieliście do tej pory, to ograniczona odpowiedź. Aby przedstawić pełną odpowiedź, użyj symbolu wieloznakowego *
, w następujący sposób:
Get-Process zsh | Format-List -Property *
Znak *
pokazuje każdy atrybut i jego wartość, co pozwala zbadać interesujące Cię wartości. Pełna odpowiedź używa również nazw prezentacji dla właściwości zamiast rzeczywistych nazw właściwości, a nazwy prezentacji wyglądają dobrze w raporcie.
Pomimo tych korzyści możesz nie chcieć uzyskać pełnych danych wyjściowych danych, ale może nie być zawartością z domyślną odpowiedzią.
Wybieranie określonych kolumn
Aby ograniczyć odpowiedź i znaleźć pośrednią odpowiedź między odpowiedzią domyślną a pełną odpowiedzią, chcesz wybrać niektóre właściwości, które cię interesują, i mieć je jako dane wejściowe parametru do Select-Object
. Ale i oto problem, musisz użyć rzeczywistych nazw kolumn. Jak dowiedzieć się prawdziwe nazwy? Użyj witryny Get-Member
. Wywołanie metody , aby Get-Member
uzyskać wszystkie właściwości i ich rzeczywiste nazwy.
Znajdowanie nazwy właściwości rzeczywistej
Szybko podsumujmy odpowiedź domyślną, korzystając z tego podzestawu:
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 0.01 0.38 644 620 zsh
Z domyślnej odpowiedzi właściwości Id
i ProcessName
są najprawdopodobniej nazywane tymi samymi, ale procesory CPU są nazwą prezentacji, nazwy właściwości rzeczywistych zwykle składają się tylko z znaków tekstowych i bez spacji. Aby dowiedzieć się, jak nazwa rzeczywista dla określonej właściwości, możesz użyć polecenia Get-Member
:
Get-Process zsh | Get-Member -Name C*
Teraz uzyskasz listę wszystkich członków z nazwami rozpoczynającymi C
się od . Wśród nich znajduje CPU
się element , który prawdopodobnie jest odpowiedni:
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
CancelErrorRead Method void CancelErrorRead()
CancelOutputRead Method void CancelOutputRead()
Close Method void Close()
CloseMainWindow Method bool CloseMainWindow()
Container Property System.ComponentModel.IContainer Container {get;}
CommandLine ScriptProperty System.Object CommandLine {get=…
Company ScriptProperty System.Object Company {get=$this.Mainmodule.FileVersionInfo.CompanyName;}
CPU ScriptProperty System.Object CPU {get=$this.TotalProcessorTime.TotalSeconds;}
Teraz wiesz, jak używać polecenia , aby zapytać Select-Object
o dokładnie to, czego potrzebujesz z poprawnymi nazwami właściwości, w następujący sposób:
Get-Process zsh | Select-Object -Property Id, Name, CPU
A oto:
Id Name CPU
-- ---- ---
644 zsh 0.3812141
727 zsh 0.3826498
731 zsh 0.3784953
743 zsh 0.3776352
750 zsh 0.3824036
15747 zsh 0.9097993
41983 zsh 0.2934763
68298 zsh 0.3121695
Ta sekwencja poleceń udostępnia dane wyjściowe, które różnią się od domyślnych danych wyjściowych, ale zawierają właściwości, które cię interesują.
Sortowanie
W przypadku użycia Sort-Object
w potoku program PowerShell sortuje dane wyjściowe przy użyciu właściwości domyślnych. Jeśli takie właściwości nie istnieją, spróbuje porównać same obiekty. Sortowanie odbywa się według kolejności rosnącej lub malejącej.
Podając właściwości, możesz wybrać sortowanie według określonych kolumn, w następujący sposób:
Get-Process | Sort-Object -Descending -Property Name
W poprzednim poleceniu sortujemy według kolumny Name
w kolejności malejącej. Aby posortować według więcej niż jednej kolumny, rozdziel nazwy kolumn przecinkami w następujący sposób:
Get-Process | Sort-Object -Descending -Property Name, CPU
Oprócz sortowania według nazwy kolumny można również podać własne wyrażenie niestandardowe. W tym przykładzie używamy wyrażenia niestandardowego do sortowania według kolumn Name
i CPU
kontrolowania kolejności sortowania dla każdej kolumny.
Get-Process 'some process' | Sort-Object -Property @{Expression = "Name"; Descending = $True}, @{Expression = "CPU"; Descending = $False}
W poprzednim przykładzie pokazano, jak wydajne i elastyczne Sort-Object
mogą być. Ten temat jest nieco zaawansowany i poza zakresem tego modułu, ale jest ponownie omówiony w bardziej zaawansowanych modułach.