Povijest naredbi na PowerShell sjednici

U početku Windows PowerShell (poput cmd naredbenog retka) sprema povijest izvršenih naredbi samo u trenutnoj sesiji PowerShell, kada zatvorite prozor PowerShell konzole ili ponovno pokrenete računalo, povijest PowerShell naredbi koje ste upisali ne sprema se nigdje. U usporedbi s bashom, ovo je značajan nedostatak. U PowerShell v5 predstavljenom u sustavu Windows 10 ta je pogreška ispravljena.

sadržaj:

  • Povijest naredbi u PowerShellu 5.0, PSReadLine modulu
  • Brisanje povijesti naredbe u PowerShell-u
  • Uvezi PowerShell povijest naredbi u drugu sesiju

Povijest naredbi u PowerShellu 5.0, PSReadLine modulu

Pretpostavimo da upišete i izvršite neku vrstu složene naredbe PowerShell. U sustavima Windows 10 i Windows Server 2016 čak i nakon ponovnog pokretanja računala možete otvoriti novu sesiju programa PowerShell i pritisnuti tipku sa strelicom prema gore. Posljednja unesena naredba trebala bi se prikazati na zaslonu. Ako nastavite pritisnuti tipku za gore, vidjet ćete sve naredbe izvršene ranije. Tako se pomoću tipki za gore i dolje možete pomicati kroz povijest naredbi i ponovno izvršavati prethodno upisane naredbe..

U starijim verzijama PowerShell-a povijest naredbi u trenutnoj sesiji nije spremljena nakon što se zatvorila. Pomoću tipki za gore / dolje možete se kretati kroz povijest naredbi u trenutnoj sesiji ili ih prikazati odjednom koristeći cmdlet dobiti-Povijest.

Možete prikazati detaljnije informacije o prethodno izvedenim naredbama, uključujući status i vrijeme početka i završetka naredbe:
Get-Povijest | Format-List-Vlasništvo *

PowerShell u sustavu Windows 10 zadano pamti zadnjih 4096 naredbi koje su spremljene u tekstualnoj datoteci koja se nalazi u profilu svakog korisnika

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

. Povijest se održava odvojeno za PowerShell konzolu, odvojeno za ISE.

Pokrenuta naredba PowerShell ulazi u povijest tek nakon dovršetka. Ako PoSh naredbi treba dugo vremena za izvršavanje, vidjet ćete je u povijesti naredbi tek kada je završena..

U slučaju da se ne želite kretati kroz čitavu povijest PowerShell naredbi, možete pretraživati ​​povijest naredbi pomoću prečaca na tipkovnici CTRL+R (obrnuto pretraživanje) i CTRL+S (traži naprijed). Pritisnite kombinaciju tipki i započnite tipkati dio naredbe koji želite pronaći u prethodno izvedenim naredbama. Povijest naredbi pretražit će uneseni tekst na bilo kojoj poziciji (za razliku od pretraživanja u PowerShell konzoli po F8 ili Shift + F8, koji podudaraju samo s početka retka), a odgovarajuća opcija je istaknuta.

primjedba. Funkcija naredbenog dnevnika u PowerShellu 5 nije ugrađena u sam Windows Okvir za upravljanje, već se temelji na modulu treće strane PSReadLine, značajno proširujući funkcionalnost konzole PowerShell. U sustavu Windows 10 nalazi se u direktoriju C: \ Program datoteke\ WindowsPowerShell\ Moduli\ PSReadline i automatski se uvozi kad se pokrene PowerShell konzola. PSReadLine pruža isticanje sintakse u konzoli, odgovoran je za mogućnost korištenja miša za odabir teksta i kopiranje / lijepljenje pomoću CTRL + C i CTRL + V. PSReadLine nije dio zasebno instaliranog PowerShell 5 za prethodne verzije sustava Windows. Dakle, ako želite koristiti funkciju evidentiranja napajanja izvršenih PowerShell naredbi u prethodnim verzijama OS-a (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) pored instaliranja Windows Management Framework 5.1, morat ćete instalirati PSReadLine modul pomoću upravitelja paketa PackageManagement (prethodno OneGet) iz mrežnog spremišta s naredbom:

Instalirajte-modul PSReadLine

Potpuni popis funkcija PSReadLine modula za upravljanje poviješću izvršenja naredbi u PowerShellu i ključevima koji su uz njih mogu se prikazati naredbom:

Get-PSReadlineKeyHandler | ? $ _. funkcija-slična '* hist *'

Opis ključne funkcije
---       --------             -----------
Opis ključne funkcije
---       --------                -----------
UpArrow PreviousHistory Zamijenite unesene podatke s prethodnom stavkom dnevnika
DownArrow NextHistory Zamijenite svoje unose sljedećim zapisom dnevnika
Ctrl + R ReverseSearchHistory Izvršite interaktivno pretraživanje dnevnika obrnuto
Ctrl + S ForwardSearchHistory Izvršite interaktivno pretraživanje dnevnika u smjeru prema naprijed
Alt + F7 ClearHistory Izbrišite sve stavke iz dnevnika naredbenog retka (ne iz dnevnika PowerShell)
F8 HistorySearchBackward Traži prethodnu stavku dnevnika koja započinje s trenutnim ulazom, na primjer P ...
Shift + F8 HistorySearchForward Traži sljedeću stavku dnevnika koja započinje s trenutnim ulazom, na primjer Ne ...
Nepovezano ViSearchHistoryBackward Pokreće novu pretragu dnevnika unatrag.
Nepovezani početakOfHistory Idite na prvu stavku dnevnika
Nepovezani kraj EndOfHistory Idite na zadnju stavku (trenutni ulaz) u dnevniku

Povijest naredbi konfigurira se pomoću cmdleta dobiti-PSReadlineOption i set-PSReadlineOption. Trenutne postavke mogu se dobiti pomoću ovog dizajna:

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

Možda će nas zanimati postavke za sljedeće parametre:

  • HistoryNoDuplicates - Trebam li zadržati iste naredbe u povijesti PowerShell-a?
  • MaximumHistoryCount - maksimalni broj spremljenih naredbi (4096 naredbi se zadano sprema);
  • HistorySearchCursorMovesToEnd - da li pri pretraživanju ići do kraja naredbe;
  • HistorySearchCaseSensitive - da li prilikom pretraživanja moraju biti velika i mala slova;
  • HistorySavePath - put do tekstne datoteke u koju je spremljena povijest PowerShell naredbi;
  • HistorySaveStyle - značajke naredbi za spremanje:
    • SaveIncrementally - naredbe se spremaju tijekom izvršavanja (zadano)
    • SaveAtExit - spremanje povijesti prilikom zatvaranja konzole
    • SaveNothing - onemogućuje povijest naredbi

Možete promijeniti postavke modula PSReadLine pomoću naredbe Set-PSReadlineOption, na primjer:

Postavi-PSReadlineOption -HistorySaveStyle SaveAtExit

Stoga je mogućnost spremanja povijesti izvršenih naredbi u PowerShellu 5.0 još jedan argument za napuštanje cmd u korist PoSh konzole..

Brisanje povijesti naredbe u PowerShell-u

Kao što smo gore opisali, modul PSReadline sprema sve naredbe PowerShell konzole u tekstualnu datoteku. Međutim, u nekim slučajevima administrator će možda morati unijeti različite povjerljive podatke (vjerodajnice, lozinke, adrese, osobni podaci itd.) U PowerShell konzolu. Prema tome, drugi administrator ili napadač poslužitelja može pristupiti podacima u tekstualnoj datoteci. Iz sigurnosnih razloga možda ćete trebati očistiti zapisnik naredbe PowerShell ili potpuno onemogućiti povijest naredbi.

cmdlet Čista povijest ne može se koristiti za brisanje povijesti naredbi, jer briše samo popis prethodnih naredbi koje prikazuje cmdlet Get-History.

Da biste izbrisali povijest prethodnih PoSh naredbi, morate izbrisati datoteku u koju su spremljene. Najlakši način za to je pomoću naredbe:

Ukloni stavku (Get-PSReadlineOption) .HistorySavePath

Nakon toga zatvorite PoSh sesiju:

Ako želite potpuno onemogućiti spremanje povijesti PoSh naredbi u tekstualnu datoteku, pokrenite naredbu:

Postavi-PSReadlineOption -HistorySaveStyle SaveNothing

Uvezi PowerShell povijest naredbi u drugu sesiju

U nekim je slučajevima prikladno imati na ruci jedan ili isti popis često korištenih PowerShell naredbi na različitim računalima. Možete izvesti trenutnu povijest naredbi u xml datoteku i uvesti ih na druga računala. To se može učiniti prepisivanjem datoteke ConsoleHost_history.txt u korisničke profile na potrebnim računalima..

Možete koristiti i cmdlet Export-Clixml za izvoz naredbi iz trenutne sesije u datoteku:

Get-Povijest | Export-Clixml -Path c: \ ps \ Commands_hist.xml

Za uvoz naredbi iz datoteke u PoSh sesiju:

Povijest dodavanja -InputObject (Import-Clixml -Path c: \ ps \ Commands_hist.xml)

Za automatski uvoz naredbi u datoteku na kraju PoSh sesije, možete vezati skriptu na događaj završetka PoSh sesije (!! Sjednica mora završiti naredbom izlaza, a ne samo zatvoriti PoSh prozor):

$ HistFile = Pristupni put ([Okolina] :: GetFolderPath ('UserProfile')) .ps_history
Registrirajte se-EngineEvent PowerShell.Exiting -Action Get-History | Export-Clixml $ HistFile | out-null
if (Test-staza $ HistFile) Import-Clixml $ HistFile | Add-Povijest