Wybieranie danych

Ukończone

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-Membermetody 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-MemberGet-Process.

Get-Process | Get-Member

Zwróć uwagę, że używasz potoku | i Get-Memberwywoł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 Csię od . Wśród nich znajduje CPUsię 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.