Historia poleceń w sesji PowerShell

Początkowo program Windows PowerShell (podobnie jak wiersz poleceń cmd) zapisuje historię wykonanych poleceń tylko w bieżącej sesji PowerShell, po zamknięciu okna konsoli PowerShell lub ponownym uruchomieniu komputera historia wpisanych poleceń PowerShell nie jest nigdzie zapisywana. W porównaniu do basha jest to znacząca wada. W programie PowerShell v5 wprowadzonym w systemie Windows 10 ta usterka została naprawiona.

Treść

  • Historia poleceń w PowerShell 5.0, moduł PSReadLine
  • Czyszczenie historii poleceń w PowerShell
  • Zaimportuj historię poleceń PowerShell do innej sesji

Historia poleceń w PowerShell 5.0, moduł PSReadLine

Załóżmy, że wpiszesz i wykonasz jakieś złożone polecenie PowerShell. W systemach Windows 10 i Windows Server 2016 nawet po ponownym uruchomieniu komputera możesz otworzyć nową sesję PowerShell i nacisnąć klawisz strzałki w górę. Ostatnie wprowadzone polecenie powinno zostać wyświetlone na ekranie. Jeśli będziesz nadal naciskać klawisz strzałki w górę, zobaczysz wszystkie polecenia wykonane wcześniej. Tak więc, używając klawiszy góra i dół, możesz przewijać historię poleceń i ponownie wykonywać poprzednio wpisane polecenia.

We wcześniejszych wersjach programu PowerShell historia poleceń w bieżącej sesji nie była zapisywana po jej zamknięciu. Za pomocą klawiszy góra / dół możesz przewijać historię poleceń w bieżącej sesji lub wyświetlać je wszystkie za pomocą polecenia cmdlet Zdobądź-Historia.

Możesz wyświetlić bardziej szczegółowe informacje o wcześniej wykonanych poleceniach, w tym status i godzinę rozpoczęcia / zakończenia polecenia:
Pobierz historię | Lista formatów-Właściwość *

Program PowerShell w systemie Windows 10 domyślnie zapamiętuje ostatnie 4096 poleceń zapisanych w pliku tekstowym znajdującym się w profilu każdego użytkownika

% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt

. Historia jest przechowywana osobno dla konsoli PowerShell, osobno dla ISE.

Działające polecenie PowerShell przechodzi do historii dopiero po zakończeniu. Jeśli wykonanie polecenia PoSh zajmuje dużo czasu, zobaczysz go w historii poleceń dopiero po jego zakończeniu..

W przypadku, gdy nie chcesz przewijać całej historii poleceń PowerShell, możesz przeszukać historię poleceń za pomocą skrótu klawiaturowego CTRL+R (wyszukiwanie wsteczne) i CTRL+S. (szukaj do przodu). Naciśnij kombinację klawiszy i zacznij wpisywać część polecenia, którą chcesz znaleźć we wcześniej wykonanych poleceniach. Historia poleceń wyszuka wprowadzony tekst w dowolnej pozycji (w przeciwieństwie do wyszukiwania w konsoli PowerShell za pomocą klawiszy F8 lub Shift + F8, które szukają dopasowań tylko od początku wiersza), a odpowiednia opcja jest podświetlona.

Uwaga. Funkcja rejestrowania poleceń w programie PowerShell 5 nie jest wbudowana w sam system zarządzania Windows, ale jest oparta na module innej firmy PSReadLine, znacznie rozszerzając funkcjonalność konsoli PowerShell. W systemie Windows 10 znajduje się w katalogu C.: \ Program Pliki\ WindowsPowerShell\ Moduły\ PSReadline i jest automatycznie importowany po uruchomieniu konsoli PowerShell. PSReadLine zapewnia podświetlanie składni w konsoli, jest odpowiedzialny za możliwość użycia zaznaczenia tekstu za pomocą myszy oraz kopiowania / wklejania za pomocą CTRL + C i CTRL + V. PSReadLine nie jest częścią oddzielnie instalowanego programu PowerShell 5 dla poprzednich wersji systemu Windows. Dlatego jeśli chcesz korzystać z funkcji rejestrowania zasilania wykonanych poleceń PowerShell w poprzednich wersjach systemu operacyjnego (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) oprócz instalacji Windows Management Framework 5.1, musisz zainstalować moduł PSReadLine za pomocą menedżera pakietów PackageManagement (wcześniej OneGet) z repozytorium online za pomocą polecenia:

Zainstaluj moduł PSReadLine

Pełną listę funkcji modułu PSReadLine do zarządzania historią wykonywania poleceń w PowerShell i powiązanymi z nimi kluczami można wyświetlić za pomocą polecenia:

Get-PSReadlineKeyHandler | ? $ _. funkcja-jak „* hist *”

Opis funkcji klucza
---       --------             -----------
Opis funkcji klucza
---       --------                -----------
UpArrow PreviousHistory Zamień wprowadzone dane na poprzedni element dziennika
DownArrow NextHistory Zamień swoje wpisy na następny wpis dziennika
Ctrl + R ReverseSearchHistory Wykonaj interaktywne wyszukiwanie dziennika w odwrotnej kolejności
Ctrl + S ForwardSearchHistory Wykonaj interaktywne wyszukiwanie dziennika w kierunku do przodu
Alt + F7 ClearHistory Usuń wszystkie elementy z dziennika wiersza poleceń (nie z dziennika PowerShell)
F8 HistorySearchBackward Wyszukaj poprzedni element dziennika, który zaczyna się od bieżących danych wejściowych, na przykład P ...
Shift + F8 HistorySearchForward Wyszukaj następny element dziennika, który zaczyna się od bieżących danych wejściowych, na przykład Ne ...
Bez ograniczeń ViSearchHistoryBackward Rozpoczyna nowe wyszukiwanie dziennika wstecz.
Bez ograniczeń BeginningOfHistory Przejdź do pierwszego elementu dziennika
Bez ograniczeń EndOfHistory Przejdź do ostatniego elementu (bieżące wejście) w dzienniku

Historia poleceń jest konfigurowana za pomocą poleceń cmdlet Zdobądź-PSReadlineOption i Set-PSReadlineOption. Aktualne ustawienia można uzyskać za pomocą tego projektu:

Get-PSReadlineOption | wybierz HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Możemy być zainteresowani ustawieniami następujących parametrów:

  • HistoryNoDuplicates - Czy muszę zachować te same polecenia w historii programu PowerShell?
  • MaximumHistoryCount - maksymalna liczba zapisanych poleceń (domyślnie zapisanych jest 4096 poleceń);
  • HistorySearchCursorMovesToEnd - czy przejść do końca polecenia podczas wyszukiwania;
  • HistorySearchCaseSensitive - czy rozróżniać wielkość liter podczas wyszukiwania;
  • HistorySavePath - ścieżka do pliku tekstowego, w którym zapisywana jest historia poleceń PowerShell;
  • HistorySaveStyle - funkcje zapisywania poleceń:
    • Zapisz przyrostowo - polecenia są zapisywane podczas wykonywania (domyślnie)
    • SaveAtExit - zapisywanie historii przy zamykaniu konsoli
    • Zapisz Nic - wyłącza historię poleceń

Możesz zmienić ustawienia modułu PSReadLine za pomocą polecenia Set-PSReadlineOption, na przykład:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

Zatem możliwość zapisania historii wykonanych poleceń w PowerShell 5.0 jest kolejnym argumentem za rezygnacją z cmd na rzecz konsoli PoSh..

Czyszczenie historii poleceń w PowerShell

Jak opisano powyżej, moduł PSReadline zapisuje wszystkie polecenia konsoli PowerShell w pliku tekstowym. Jednak w niektórych przypadkach administrator może wprowadzić różne poufne informacje (poświadczenia, hasła, adresy, dane osobowe itp.) W konsoli PowerShell. W ten sposób inny administrator serwera lub osoba atakująca może uzyskać dostęp do danych w pliku tekstowym. Ze względów bezpieczeństwa może być konieczne wyczyszczenie dziennika poleceń PowerShell lub całkowite wyłączenie historii poleceń.

Cmdlet Wyczyść historię nie można użyć do wyczyszczenia historii poleceń, ponieważ usuwa tylko listę poprzednich poleceń wyświetlanych przez polecenie cmdlet Get-History.

Aby usunąć historię poprzednich poleceń PoSh, musisz usunąć plik, w którym są zapisane. Najłatwiej to zrobić za pomocą polecenia:

Usuń element (Get-PSReadlineOption) .HistorySavePath

Następnie zamknij sesję PoSh:

Jeśli chcesz całkowicie wyłączyć zapisywanie historii poleceń PoSh w pliku tekstowym, uruchom polecenie:

Set-PSReadlineOption -HistorySaveStyle ZapiszNic

Zaimportuj historię poleceń PowerShell do innej sesji

W niektórych przypadkach wygodnie jest mieć pod ręką jedną lub tę samą listę często używanych poleceń PowerShell na różnych komputerach. Możesz wyeksportować bieżącą historię poleceń do pliku xml i zaimportować je na inne komputery. Można to zrobić, kopiując plik ConsoleHost_history.txt do profili użytkowników na niezbędnych komputerach..

Możesz także użyć polecenia cmdlet Export-Clixml, aby wyeksportować polecenia z bieżącej sesji do pliku:

Pobierz historię | Export-Clixml -Path c: \ ps \ Command_hist.xml

Aby zaimportować polecenia z pliku do sesji PoSh:

Add-History -InputObject (Import-Clixml -Path c: \ ps \ Command_hist.xml)

Aby automatycznie importować polecenia do pliku na końcu sesji PoSh, możesz powiązać skrypt ze zdarzeniem końcowym sesji PoSh (!! Sesja musi zakończyć się poleceniem wyjścia, a nie tylko zamknąć okno PoSh):

$ HistFile = Join-Path ([Environment] :: GetFolderPath ('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action Get-History | Export-Clixml $ HistFile | out-null
if (ścieżka testowa $ HistFile) Import-Clixml $ HistFile | Dodaj historię