alphasec academy

for(){$p=(gps|Sort-Object -D CPU|Select -First ($Host.UI.RawUI.WindowSize.Height-4)|Out-String).trim();cls;""+(date);$p;sleep 1} - *nixowy top w Powershellu

Dodatkowe informacje

Powyższy oneliner uruchomi coś, co może przypominać znaną z systemów Unix/Linux komendę top, wyświetlającą listę procesów w trybie tekstowym.
Przyglądając się mu bliżej:
  • for() { ... }
    - nieskończona pętla,
  • $p=gps
    - pobierz listę procesów wykorzystując
    gps
    będący aliasem na
    Get-Process
    , wynik zapisz do zmiennej
    $p
    ,
  • Sort-Object -D CPU
    - sortuj procesy po użyciu procesora (CPU) malejąco (-Descending, w skrócie -D); pod Windowsem można by było wykorzystać alias, pisząc
    sort -D
    ,
  • Select -First ($Host.UI.RawUI.WindowSize.Height-4)
    - wybierz tyle pierwszych wyników, ile ma wysokość terminala bez 4 linii,
  • .trim()
    - usuń białe znaki na końcach wierszy,
  • cls
    - wyczyść cały ekran,
  • ""+(date);$p
    - wyświetl aktualną datę a następnie listę procesów,
  • sleep 1
    - zaśnij na sekundę.
Dla wygody moglibyśmy sobie to zamknąć w funkcji np. o nazwie
pstop
:
function pstop() { for(){$p=(gps|Sort-Object -D CPU|Select -First ($Host.UI.RawUI.WindowSize.Height-4)|Out-String).trim();cls;""+(date);$p;sleep 1}  } 
By następnie ją wywołać po prostu pisząc
pstop
.
Żeby było to dostepne zawsze pod ręką, możemy tę funkcję wkleić do pliku profilowego, np. tworząc go lub edytując za pomocą
notepad $PROFILE
(tutaj w przypadku Wiindowsa musimy jednak pamiętać o polityce uruchamiania skryptów, możliwe, że przyda się wykonać
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
).

Subskrybuj

Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.